我最近偶然发现一个看似奇怪的行为,谷歌完全无法解释.
using Microsoft.VisualStudio.TestTools.UnitTesting; class TestClass { public override bool Equals(object obj) { return true; } } [TestMethod] public void TestMethod1() { TestClass t = new TestClass (); Assert.AreEqual (t, null); // fails Assert.IsTrue (t.Equals (null)); // passes }
我希望这个测试能够成功.但是,在Visual Studio 2008/.NET 3.5中,它失败了.它是打算像那样还是一个bug?
你的TestClass违反了合同Object.Equals
.Assert.AreEqual
非常合理地依靠合同.
文档说明(在要求列表中):
x.Equals(null引用(在Visual Basic中为Nothing))返回false.
测试空值时,请勿使用Assert.AreEqual
.
你必须使用Assert.IsNull()
它.