我使用NFluent检查列表清单是否有问题:
using NFluent;
[Fact]
public void CollectionTest()
{
var a = new List<int> {1, 2};
var b = new List<int> {3, 4};
// List contains references to a and b
var list1 = new List<List<int>> {a, b};
Check.That(list1).ContainsExactly(a, b); // OK
Check.That(list1).ContainsExactly(new List<List<int>> {a, b}); // OK
// List contains new instances of lists same as a and b
var list2 = new List<List<int>>
{
new List<int> {1, 2}, // new instance, same as a
new List<int> {3, 4} // new instance, same as b
};
Assert.Equal(list2, new List<List<int>> { a, b }); // XUnit assert is OK
Check.That(list2).ContainsExactly(a, b); // Fail
Check.That(list2).ContainsExactly(new List<List<int>> {a, b}); // Fail
}
问题:最后两次检查失败。
原因:问题在于ContainsExactly
确实按引用比较了列表(如Equals
),而不是按值进行比较(如SequenceEqual所做)。
解决方法:
Assert.Equal()
。 Equals()
Enumerable.SequenceEqual
的List的自定义子类
醇>
问题:我想继续使用NFluent,是否有一些简单的方法可以让最后两张支票有效?
答案 0 :(得分:1)
简短回答:升级到NFluent 2.1+,比较行为已经修改。