I have a custom type Type that implement IEquatable(Type). Then I new up two instances of the type, none of them are Null
Assert.IsTrue(obj1.equals(obj2)) //Success
Assert.AreEqual(obj1, obj2) //False
Assert.AreEqual(Type)(obj1, obj2) //False
The first one hits my equals, the second one hits the ToString() Any suggestions?
update
some code to illustrate: http://pastebin.com/1uecrfeW
more update
If I have to override the base equals, even if a better (generic) equals is available, then what's the use of implementing IEquals(T)?
My guess is that it's actually hitting Equals(object)
instead of Equals(T)
. If you haven't overridden Equals(object)
then it's probably failing the assertion, which then uses ToString
to create a useful failure message.
If you could show a short but complete program which demonstrates the problem (including which Assert
method you're calling - NUnit? Something else?) that would help.
IIRC Assert.AreEqual is non-generic, so only object.Equals applies; try checking the override of non-generic object.Equals.
In addition to the inconvenience of calling a generic method via reflection, the objects could also implement multiple IEquatable<T>
(for different T). So the non-generic version makes sense here, IMO.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With