对一系列复杂对象进行单元测试的正确方法是什么?
本文关键字:方法 是什么 单元测试 复杂 一系列 对象 | 更新日期: 2023-09-27 17:49:18
对返回一系列复杂对象的方法进行单元测试的正确方法是什么?
我正在实现一个分支查找器。我有一个存储库,它返回一个Branch
对象,其中包含各种信息,例如
- 分支名称 <
- 地址/gh>
- 产品库存
我有一个存储库,我已经假装总是返回一个已知的Branch
对象序列,我需要测试我的BranchFinder
服务中的逻辑。
Find
方法接受位置(lat/long)和Flags
enum形式的产品规格。
public IEnumerable<Branch> Find(Location location, Products products);
知道了搜索要操作的数据,我可以安全地指定位置和产品规格,并知道会发生什么,但是我如何断言顺序是正确的呢?
。
var loc = new Location(53.79424, -1.546112);
var results = service.Find(loc, Products.Milk | Products.Bananas);
我知道对于这个给定的查询,数据的特定子集应该以特定的顺序返回,并且从当前位置到分支的距离应该随着您迭代结果集而增加。
测试这些规则和情况的正确/最佳方法是什么?
我要做的第一件事是确保您通过接口ILocatorService
访问服务。还要确保它必须获得分支信息的任何下游依赖也通过接口使用(以便您可以稍后在测试中注入Mock)。
另外,要清楚你正在测试ILocatorService本身(以确保你在服务中所做的任何更改都不会破坏它)。
对于ILocatorService使用的任何依赖,你可以使用RhynoMocks来返回一组结果(它可能会去DB或其他供应商应用程序给我们分支列表)
这样你对ILocatorService的输入保持不变,你唯一要测试的是你所改变的任何逻辑是否会破坏现有的测试/功能。
如果您知道从Find方法中检索到多少结果,您可以将其转换为列表或数组,并检查每个位置以检查Branch对象是否具有正确的值,这就是我要做的。