对一系列复杂对象进行单元测试的正确方法是什么?

本文关键字:方法 是什么 单元测试 复杂 一系列 对象 | 更新日期: 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对象是否具有正确的值,这就是我要做的。