首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何才能获得StructureMap的AutoMocker来模拟假数据?

我如何才能获得StructureMap的AutoMocker来模拟假数据?
EN

Stack Overflow用户
提问于 2010-07-22 12:41:26
回答 1查看 1.1K关注 0票数 0

我目前正在尝试实现StructureMap的AutoMocking功能,我需要得到模拟的帮助。

我有一个测试方法如下:

代码语言:javascript
复制
[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的真正实现如下:

代码语言:javascript
复制
private readonly IGroupService _groupService;
public PartialViewResult DirectoryResult(string query)
{
    return PartialView(new FundDirectoryViewModel
    {
        Groups =_groupService.GetGroupsByQuery(query)
    });
}

其中,_groupService.GetGroupsByQuery(query)使用IGroupRepository接口从数据库读取数据。当然,我不希望我的测试读取实际数据库中的数据,但是有人能告诉我如何获取模拟数据吗?

要让AutoMocker为我模拟假数据,我需要做些什么?

更新:

作为参考,这是GroupService & GroupRepository的定义。

代码语言:javascript
复制
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..
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-07-22 13:31:07

我被告知这个问题是错误的。Automocker不像那样模拟数据。应该由我来指定Rhino Mocks的假数据。

这样做是可行的:

代码语言:javascript
复制
[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")));
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3308910

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档