簡體   English   中英

如何獲得StructureMap的AutoMocker模擬假數據?

[英]How can I get StructureMap's AutoMocker to mock fake data?

我目前正在嘗試實現StructureMap的AutoMocking功能,並且需要獲得模擬幫助。

我有一個測試方法如下:

[Test]
public void DirctoryResult_Returns_Groups()
{
    var autoMocker = new RhinoAutoMocker<GroupController>(MockMode.AAA);

    GroupController controller = autoMocker.ClassUnderTest;

    var directoryResult = controller.DirectoryResult("b");

    var fundDirectoryViewModel = (FundDirectoryViewModel)directoryResult.ViewData.Model;

    Assert.IsNotNull(fundDirectoryViewModel.Groups);
}

當前測試失敗,因為fundDirectoryViewModel.Groups為null。

DirectoryResult的實際實現如下:

private readonly IGroupService _groupService;
public PartialViewResult DirectoryResult(string query)
{
    return PartialView(new FundDirectoryViewModel
    {
        Groups =_groupService.GetGroupsByQuery(query)
    });
}

_groupService.GetGroupsByQuery(query)使用IGroupRepository的接口從數據庫讀取數據。 當然,我不希望我的測試從實際數據庫中讀取數據,但是有人可以告訴我如何獲取模擬數據嗎?

我該怎么做才能讓AutoMocker為我模擬假數據?

更新:

供參考,這是GroupService和GroupRepository的定義

public class GroupService : IGroupService
{
    private readonly IGroupRepository _groupRepository;

    public GroupService(IGroupRepository groupRepository)
    {
        _groupRepository = groupRepository;
    }

    public IList<CompanyGroupInfo> GetGroupsByQuery(string query)
    {
        return _groupRepository.GetGroupsByQuery(query);
    }
}

public class GroupRepository : DataUniverseRepository, IGroupRepository
{
    public GroupRepository(ISession session)
    {
        _session = session;
    }

    public IList<CompanyGroupInfo> GetGroupsByQuery(string query)
    {
        // dig into the database and return stuff with _session..
    }
}

我被告知這個問題是錯誤的。 Automocker不會模擬這樣的數據。 由Rhino Mocks指定虛假數據由我決定。

這有效:

[Test]
public void DirctoryResult_Returns_Groups()
{
    var service = autoMocker.Get<IGroupService>();
    service.Expect(srv => srv.GetGroupsByQuery(Arg<string>.Is.Anything))
        .Return(new List<CompanyGroupInfo>
                    {
                        new CompanyGroupInfo(),
                        new CompanyGroupInfo(),
                        new CompanyGroupInfo()
                    });

    service.Replay();

    var directoryResult = _controller.DirectoryResult("b");

    var fundDirectoryViewModel = (FundDirectoryViewModel)directoryResult.ViewData.Model;

    Assert.That(fundDirectoryViewModel.Groups.Count, Is.EqualTo(3));

    service.AssertWasCalled(srv => srv.GetGroupsByQuery(Arg<string>.Is.Equal("b")));
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM