当前位置: 首页 > 编程语言 > C#

C#Assert.AreNotEqual与Equals共享

时间:2023-04-11 02:45:59 C#

C#Assert.AreNotEqual与Equals当试图验证自己C#EqualsforIEnumerables是引用等于时,我发现了一些奇怪的东西。在NUnit中进行以下设置vara=(IEnumerable)(new[]{"one","two"});varb=(IEnumerable)(new[]{“一”,“二”});这测试Assert.IsFalse(a.Equals(b));通过,而这个测试Assert.AreNotEqual(a,b);才不是。谁能解释为什么?编辑:感谢您的回答。我刚刚阅读了NUnit的文档,它说了同样的事情,AreEqual和AreNotEqualwithcollections测试集合中每个元素的相等性。我想我坚持这个概念,AreEqual和AreNotEqual只是使用普通的Equals。对a.Equals(b)的调用返回false,因为a和b不是同一个对象(尽管它们当然是相同的枚举)。Equals方法自动按引用比较对象,除非被重写,这就是本例中发生的情况。Assert.AreNotEqual比那要聪明一点。与Equals方法不同,它是为调试目的而设计的,因此它实际上比较了两个枚举产生的序列,因为它将IEnumerable识别为一种特殊类型。您还应该注意到它还做了其他有趣的事情,例如当两个参数在数值上相同但具有不同的值类型(例如,short和long)时返回true。希望有所帮助。我没有查看NUnit源代码以了解NUnit人员是如何编写AreNotEqual的。但是,我可以告诉您它如何处理具有相同行为的MbUnit。首先通过执行如下代码检查AssertNotEqual(a,b)中的引用相等性:if(Object.ReferenceEquals(left,right))returntrue;在你的情况下它失败了。接下来,它检查对象是否为IEnumerable类型。如果是,遍历它们并比较项目是否相同且顺序相同。但是在IE中,Tnumerable中的T类型比MbUnit中的String或ValueType复杂,AssertNotEqaual(a,b)不会失败。以上就是C#学习教程的全部内容:C#Assert.AreNotEqualandEquals。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注——vara=(IEnumerable)(new[]{newStringBuilder("one"),newStringBuilder(“二”)});varb=(IEnumerable)(new[]{newStringBuilder("one"),newStringBuilder("two")});Assert.IsFalse(a.Equals(b));//成功Assert.AreNotEqual(a,b);//成功本文来自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: