为什么这种测试方法失败了?

时间:2011-02-22 08:24:37

标签: c# visual-studio-2010 unit-testing

这是我的测试功能(c#,visual studio 2010):

[TestMethod()]
public void TestGetRelevantWeeks()
{
List<sbyte> expected = new List<sbyte>() { 2, 1, 52, 51, 50, 49, 48, 47, 46, 45 };
List<sbyte> actual = new List<sbyte>() { 2, 1, 52, 51, 50, 49, 48, 47, 46, 45 };
Assert.AreEqual<List<sbyte>>(expected, actual);
}

异常: 失败的TestGetRelevantWeek Assert.AreEqual失败。
预期:System.Collections.Generic.List 1 [System.SByte]。
实际:System.Collections.Generic.List 1 [System.SByte]。


AreEqual是否仅检查引用的相等性,而不是内容?

然而,异常消息会令人困惑。我也找不到通用列表的默认相等比较器的文档。

您能否帮助澄清测试失败的原因以及测试两个列表内容相等的解决方案?

亲切的问候

4 个答案:

答案 0 :(得分:9)

Assert.AreEqual()方法按预期执行引用相等性测试。

假设您使用的是.Net 3.5或更高版本,您可以这样做:

using System.Linq;

Assert.IsTrue(expected.SequenceEqual(actual));

编辑:当此选项可用时澄清。

答案 1 :(得分:7)

  

AreEqual是否仅检查引用的相等性,而不是内容?

叶氏。

测试你可以的内容:

Assert.AreEqual(expected.Count, actual.Count);
for (var i = 0; i < expected.Count; i++)
{
    Assert.AreEqual(expected[i], actual[i]);
}

答案 2 :(得分:2)

我认为这就是你要找的东西:

Assert.IsTrue(expected.SequenceEqual(actual));

检查this问题

答案 3 :(得分:1)

您也可以使用CollectionAssert代替Assert

CollectionAssert.AreEqual(expected, actual);

我认为,这比循环测试用例的集合更为简单和幻想。