问题 1次的出现(S):MSTest:CollectionAssert.AreEquivalent失败。预期集合包含
谁能告诉我为什么我的单元测试与此错误消息失败?
CollectionAssert.AreEquivalent failed。期望的收集包含1 发生(s)。实际的 集合包含0个事件。
目标:
我想检查两个列表相同。如果两者都包含具有相同属性值的相同元素,则它们是相同的。该命令无关紧要。
代码举例:
这是产生误差的代码。 list1
和list2
是相同的,即彼此的复制粘贴。
[TestMethod]
public void TestListOfT()
{
var list1 = new List<MyPerson>()
{
new MyPerson()
{
Name = "A",
Age = 20
},
new MyPerson()
{
Name = "B",
Age = 30
}
};
var list2 = new List<MyPerson>()
{
new MyPerson()
{
Name = "A",
Age = 20
},
new MyPerson()
{
Name = "B",
Age = 30
}
};
CollectionAssert.AreEquivalent(list1.ToList(), list2.ToList());
}
public class MyPerson
{
public string Name { get; set; }
public int Age { get; set; }
}
我也试过这条线(source)
CollectionAssert.AreEquivalent(list1.ToList(), list2.ToList());
和这条线(source)
CollectionAssert.AreEquivalent(list1.ToArray(), list2.ToArray());
附:
相关堆栈溢出的问题:
我已经看到了这两个问题,但答案没有帮助。
感谢您的回答!我会将你的答案标记为接受的答案,因为它解释了“为什么”。我会链接到我的答案显示[“如何”](http://stackoverflow.com/questions/5194966/mstest-collectionassert-areequivalent-failed-the-expected-collection-contains-1/5196791#5196791 )。 – Lernkurve 2011-03-06 13:25:20
谢谢!我很感激! – neontapir 2011-03-07 03:46:24
我从@Lernkurve的回答开始,它运作良好。之后,我尝试将方法Equals和GetHashCode移动到MyPerson类,使其实现IEqualityComparer。我希望Assert.IsTrue(list1.SequenceEqual(list2));现在将在MyPerson上使用IEqualityComparer实现,但它不会。我得到“Assert.IsTrue失败”。所以,你的建议“......或者实现MyPerson.Equals()”似乎不起作用。我不懂为什么。 –
2013-03-05 15:50:13