C # UnitTest - Assert.AreEqual () does not call Equals if argument is null

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?

+5
source share
5 answers

Your TestClass is breaking the contract Object.Equals. Assert.AreEqualrelies on this contract quite reasonably.

Status of documents (in the list of requirements):

  • x.Equals (null reference (Nothing in Visual Basic)) returns false.
+15
source

When testing zeros do not use Assert.AreEqual.

Assert.IsNull().

+5

. , "t" null, , t TestClass.

, t.Equals true.

, TestMethod1 .

+1

, - t TestClass, , .

+1

, , AreEqual(anythingButNull, null) false?

(edit) , , , , Equals. AreEqual , , . , , Assert.IsFalse(blah.Equals(null)).

0

All Articles