Recently, I came across a seemingly strange behavior that Google did not fully explain.
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 }
I expect this test to be successful. However, in Visual Studio 2008 / .NET 3.5, it fails. Is this assumed, or is it a mistake?
Your TestClass is breaking the contract Object.Equals. Assert.AreEqualrelies on this contract quite reasonably.
Object.Equals
Assert.AreEqual
Status of documents (in the list of requirements):
When testing zeros do not use Assert.AreEqual.
Assert.IsNull().
Assert.IsNull()
. , "t" null, , t TestClass.
, t.Equals true.
, TestMethod1 .
, - t TestClass, , .
, , AreEqual(anythingButNull, null) false?
AreEqual(anythingButNull, null)
(edit) , , , , Equals. AreEqual , , . , , Assert.IsFalse(blah.Equals(null)).
Assert.IsFalse(blah.Equals(null))