C# Assert.AreEquals调用object.Equals,而与IEquatable实现无关
今天在编写和运行一些测试时,我发现即使我的类实现了一个C# Assert.AreEquals调用object.Equals,而与IEquatable实现无关,c#,visual-studio,unit-testing,C#,Visual Studio,Unit Testing,今天在编写和运行一些测试时,我发现即使我的类实现了一个IEquatable接口,Assert.AreEqual(instanceOfMyClass,anotherInstance)导致错误 结果表明,不管怎样,Assert.AreEquals都调用object.Equals(object obj)而不是正确的MyClass.Equals(MyClass obj)函数 假设存在逻辑原因,那么原因是什么?您可以尝试在所讨论的类上重载==并使用通用的“Assert.AreEqual”重载,该重载使用e
IEquatable
接口,Assert.AreEqual(instanceOfMyClass,anotherInstance)代码>导致错误
结果表明,不管怎样,Assert.AreEquals
都调用object.Equals(object obj)
而不是正确的MyClass.Equals(MyClass obj)
函数
假设存在逻辑原因,那么原因是什么?您可以尝试在所讨论的类上重载==并使用通用的“Assert.AreEqual”重载,该重载使用equals运算符
就个人而言,我更喜欢使用Assert.AreEqual(true,InstanceA.Equals(InstanceB))
,因为这肯定会使用Equals方法;当然,这假设您已经对Equals方法进行了单元测试,并且100%确定它是有效的:)
至于为什么Assert使用object.Equals,我想我们必须询问类的设计者:)但我想一个原因是,如果Equals方法有缺陷,那么测试结果就不好。我只是通过检查输入类型将其转发到object.Equals中的相关函数。我更多的是问为什么,而不是寻找解决方案