CodeTableItem
类创建一个Equal
重载:ICollection<CodeTableItem> expectedValutaList = new List<CodeTableItem>();
expectedValutaList.Add(new CodeTableItem("DKK", "DKK"));
expectedValutaList.Add(new CodeTableItem("EUR", "EUR"));
RepoDac target = new RepoDac();
var actual = target.GetValutaKd();
CollectionAssert.AreEqual(expectedValutaList.ToList(),actual.ToList());
测试工作正常,但不幸的是它依赖于Equality
函数,这意味着如果我扩展CodeTableItem
类加上一个字段,并忘记扩展Equals
函数,单元测试仍然可以通过,尽管我们没有测试所有字段。我们想避免这种Equality
污染(参见测试特定的相等性),它仅被编写以符合测试。
我们尝试使用OfLikeness
,并以以下方式重写了测试:
ICollection<CodeTableItem> expectedValutaList = new List<CodeTableItem>();
expectedValutaList.Add(new CodeTableItem("DKK", "DKK"));
expectedValutaList.Add(new CodeTableItem("EUR", "EUR"));
var expectedValutaListWithLikeness =
expectedValutaList.AsSource().OfLikeness<List<CodeTableItem>>();
RepoDac target = new RepoDac();
ICollection<CodeTableItem> actual;
actual = target.GetValutaKd();
expectedValutaListWithLikeness.ShouldEqual(actual.ToList());
但是测试失败了,因为Capacity
不相等。我编写了一个通过反射运行多次的代码,并通常最终实现了忽略字段的重载。是否有一种方法可以使用OfLikeness
或ShouldEqual
来忽略特定字段?或者还有其他解决此问题的方式吗?