1 回答
TA贡献1827条经验 获得超7个赞
此测试失败的原因有两个:
每个 List 的第一个元素(元素 0)是一个包含三个元素的数组。它们实际上并不匹配 - 第一个元素的第二个元素是 54 23和 54 32。即使你解决了这个问题,它仍然会失败,因为......
其次,您需要告诉 .NET 对列表的元素进行结构比较,默认情况下它会进行对象引用比较 - 即每个 int[] 数组上的引用相等。
更改您的集合断言如下:
CollectionAssert.AreEqual(
expected, actual,
System.Collections.StructuralComparisons.StructuralComparer,
"\nExpect: " + ... // omitted for brevity
);
并且测试将通过。
如果你只是比较数组,测试框架会做一个零碎的比较,所以这个测试,例如,会通过:
[TestMethod]
public void WillCompareByElement()
{
var x = new[] { 3, 2 };
var y = new[] { 3, 2 };
CollectionAssert.AreEqual(x, y);
}
您可能会得到更清晰的测试失败消息,循环遍历列表的每个元素并以这种方式进行比较。
此外,您可以考虑使用像 Shouldly 这样像样的断言库。然后你可以写:
expected.ShouldBe(actual);
并获得如下输出:
Message: Test method SOTestEquals.UnitTest1.SecondRow threw exception:
Shouldly.ShouldAssertException: [[5324, 5423, 2345]]
should be
[[5324, 5432, 2345]]
but was not
difference
[*[5324, 5423, 2345]*]
保存您编写自定义输出。
- 1 回答
- 0 关注
- 154 浏览
添加回答
举报