【问题标题】:How can I get StructureMap's AutoMocker to mock fake data?如何让 StructureMap 的 AutoMocker 模拟假数据?
【发布时间】:2010-07-22 12:41:26
【问题描述】:

我目前正在尝试实现 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 为空。

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..
    }
}

【问题讨论】:

    标签: c# nunit structuremap rhino-mocks automocking


    【解决方案1】:

    我被告知问题有误。 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")));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-23
      • 2019-12-03
      • 1970-01-01
      • 1970-01-01
      • 2011-11-15
      相关资源
      最近更新 更多