【问题标题】:Unit testing fake repository, how can I test the GetById method without first adding an entity?单元测试假存储库,如何在不先添加实体的情况下测试 GetById 方法?
【发布时间】:2008-11-24 12:26:44
【问题描述】:

我的理解是您必须编写隔离功能的单元测试。因此,给定一个具有此方法的存储库类:

Entity GetById(Guid id)

和一个 fake 实现(使用字典进行存储),如果不先添加实体,您将如何编写测试?可以使用一组已知的 guid 进行测试吗?然后在假存储库构造函数中,我可以用几个实体填充字典,其中 guid 遵循某种模式,以便我可以使用我知道将返回实体的 guid 测试 GetById() 方法。

感谢阅读!

PS。这是我第一次写单元测试。

【问题讨论】:

    标签: c# unit-testing


    【解决方案1】:

    是的,您可以在测试中使用已知的测试 ID - 这就是我会做的。虽然我已经成为Rhino Mocks 的粉丝,它可以让你更直接地测试你希望模拟对象做什么。

    例如,在调用存储库之前,您可以这样做:

    Expect.Call(repository.GetById("someObject")).Return(new RepositoryThing());
    

    不管怎样,它对我很有吸引力:)

    【讨论】:

    • 你可能会做 new RepositoryThing { Id = 1, Name = "TestOne, ... }
    • 但是我不再测试假存储库了?
    【解决方案2】:

    是的,使用可以从假实例查询的固定项目列表的对象/接口的假实现是一种有效的做法。

    显然,如果不先添加条目,则只能测试在存储库中找不到 Guid 时返回的内容。

    在 C# 中允许它,也可以让存储库的假实现具有向存储库添加项目的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      • 2019-01-29
      • 1970-01-01
      • 2018-02-08
      • 1970-01-01
      相关资源
      最近更新 更多