C# 为什么单元测试Assert.AreEqual()方法没有在自定义类中选择我自己的Equals()方法
我正在尝试为.NETFramework类库项目构建一个单元测试项目。我有一些定制的模型类型,它们实现了C# 为什么单元测试Assert.AreEqual()方法没有在自定义类中选择我自己的Equals()方法,c#,.net,unit-testing,C#,.net,Unit Testing,我正在尝试为.NETFramework类库项目构建一个单元测试项目。我有一些定制的模型类型,它们实现了IEquatable接口,并且在要测试的项目中有自己的Equals()方法。 我在网上读了几篇文档,他们说Assert.AreEqual方法只在对象没有自己的Equals()方法时才运行RefereceEqual。但是我发现TestMethod仍然没有返回true,即使对象有自己的Equals方法。我用一个简单的例子重新创建了下面的场景。我做错什么了吗 namespace Demo {
IEquatable
接口,并且在要测试的项目中有自己的Equals()
方法。
我在网上读了几篇文档,他们说Assert.AreEqual
方法只在对象没有自己的Equals()
方法时才运行RefereceEqual
。但是我发现TestMethod仍然没有返回true,即使对象有自己的Equals
方法。我用一个简单的例子重新创建了下面的场景。我做错什么了吗
namespace Demo
{
public class MyDog : IEquatable<MyDog>
{
public string Name;
public int Age;
public bool Equals(MyDog other)
{
if (other == null) return false;
return (this.Name == other.Name) && (this.Age == other.Age);
}
}
}
dog1.Equals(dog2)
将返回true,而单元测试将失败。如何在测试方法中正确比较dog1和dog2。在引擎盖下,Assert.AreEqual方法使用object.Equals来比较这两个对象。因此,如果您将代码更新为
public class MyDog
{
public string Name;
public int Age;
public override bool Equals(object obj)
{
if (!(obj is MyDog other)) return false;
return (this.Name == other.Name) && (this.Age == other.Age);
}
}
在后台,Assert.AreEqual方法使用object.Equals来比较这两个对象。因此,如果您将代码更新为
public class MyDog
{
public string Name;
public int Age;
public override bool Equals(object obj)
{
if (!(obj is MyDog other)) return false;
return (this.Name == other.Name) && (this.Age == other.Age);
}
}
这张便笺应该能回答您的问题。
Assert.AreEqual
正在使用另一个Equals(object)
从基本对象尝试使用Assert.IsTrue(dog1.Equals(dog2))
,下面是一个向@Nkosi感激先生学习的好例子!很好的参考此注释应该回答您的问题Assert.AreEqual
正在使用来自基本对象的另一个Equals(object)
尝试使用Assert.IsTrue(dog1.Equals(dog2))
,下面是一个向@Nkosi感激先生学习的好例子!很好,我知道你在说什么…但一个小缺陷是…你的其他
来自哪里…你刚刚传入了obj
对吗?@Gen.L实际上,other
是将obj
转换为MyDog后的结果。谢谢你,先生~,other
是obj
转换为MyDog后的结果。谢谢您,先生~~~~~~~~~~~