对返回一系列复杂对象的方法进行单元测试的正确方法是什么?
我正在实施分支查找器。我有一个存储库,它返回一个Branch
对象,它有各种信息,如
我有一个我伪造的存储库,总是返回一个已知的Branch
对象序列,我需要测试BranchFinder
服务中的逻辑。
Find
方法采用Flags
枚举形式的位置(纬度/经度)和产品规格。
public IEnumerable<Branch> Find(Location location, Products products);
了解搜索将要运行的数据,我可以安全地指定位置和产品规格,知道会发生什么,但我如何断言序列是正确的。
e.g。
var loc = new Location(53.79424, -1.546112);
var results = service.Find(loc, Products.Milk | Products.Bananas);
我知道这个给定的查询应该按特定顺序返回某个数据子集,并且当你遍历结果集时,从当前位置到分支的距离应该增加。
测试这些规则和情况的正确/最佳方法是什么?
答案 0 :(得分:1)
如果您知道从Find方法中检索了多少结果,您可以转换为列表或数组并检查每个位置以检查Branch对象是否具有正确的值,这就是我的方法。
答案 1 :(得分:1)
我要做的第一件事就是确保您通过界面ILocatorService
访问服务。还要确保它具有的任何下游依赖关系也可以通过接口使用分支信息(以便您可以在测试中稍后注入Mock)。
另外,要明确您正在测试ILocatorService本身(以确保您在服务中所做的任何更改都会破坏它)。
对于ILocatorService使用的任何依赖项,您可以使用RhynoMocks返回结果集(它可能会转到DB或其他供应商应用程序以向我们提供分支列表)
这样你对ILocatorService的输入保持不变,你唯一要测试的是你所改变的逻辑是否破坏了existign测试/功能。