2016-05-19 42 views
-2

MSTest的提供CollectionAssert类,并在此基础上的问题,我比较返回的字典符合我的期望:.NET Dictionaries have same keys and values, but aren't "equal"测试两个词典包含相同的元素

但是后来我故意填充我的字典以不同的顺序返回的版本,但完全相同的元素......现在CollectionAssert.AreEqual失败,当我打电话:

CollectionAssert.AreEqual((ICollection)expected, (ICollection)ret)

这似乎不是一个很好的平等的测试 - 我是否需要推出自己的或不MSTest的东西提供出来的b牛?

回答

2

在同一个类中有另一个名为AreEquivalent()的方法;

如果您作为参数发送的两个ICollection对象具有相同数量的相同元素,这将返回true。在这种情况下,订单无关紧要。这是AreEqual()和AreEquivalent()之间的最大区别。

下面你可以从MSDN页面找到官方说明。

“验证指定的集合是否等价,如果它们具有相同数量的相同元素,但是是任意顺序,那么这两个集合是等价的;如果它们的值相等,则元素相等,如果它们引用同一对象“。

而你对该函数的调用与AreEqual()的调用相同,见下文;

CollectionAssert.AreEquivalent((ICollection)expected, (ICollection)ret) 
2

您可以使用AreEquivalent

CollectionAssert.AreEquivalent((ICollection)expected, (ICollection)ret) 

这种方法测试,如果集合有相同数量相同的元素,但在任何顺序。

相关问题