我正在测试两个对象(以及它们的集合),但即使它们具有相同的类型,它也会失败:
我做了一些研究,这可能是因为参考文献可能有所不同。但是,它仍然是同一类型,我不知道要使用什么 Assert 方法。(CollectionAssert.AreEquivalent 也失败了)。
已编辑
我也在尝试检查每个字段的值是否相同,在这种情况下,我应该为每个字段执行 Assert.AreEqual 吗?
- 谢谢,所有的答案都有帮助
我正在测试两个对象(以及它们的集合),但即使它们具有相同的类型,它也会失败:
我做了一些研究,这可能是因为参考文献可能有所不同。但是,它仍然是同一类型,我不知道要使用什么 Assert 方法。(CollectionAssert.AreEquivalent 也失败了)。
已编辑
我也在尝试检查每个字段的值是否相同,在这种情况下,我应该为每个字段执行 Assert.AreEqual 吗?
- 谢谢,所有的答案都有帮助
您应该比较对象的类型。正如您正确识别的那样,对象的内容可能不同,因此它们不能被视为相等。
尝试类似的东西
Assert.AreEqual(typeof(ObjectA), typeof(ObjectB))
Assert.AreEqual
检查两个对象是否相同,而不是它们只是同一类型。要做到这一点,你会这样做:
Assert.AreEqual(A.GetType(), B.GetType());
如果要比较 dto 对象的值,则必须覆盖Equals
和GetHashCode
方法。
例如给定类:
public class DTOPersona
{
public string Name { get; set; }
public string Address { get; set; }
}
如果您认为具有相同名称(但不是地址)的 DTOPersona 类的两个对象是等效对象(即同一个人),您的代码可能如下所示:
public class DTOPersona
{
public string Name { get; set; }
public string Address { get; set; }
protected bool Equals(DTOPersona other)
{
return string.Equals(Name, other.Name);
}
public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj))
{
return false;
}
if (ReferenceEquals(this, obj))
{
return true;
}
if (obj.GetType() != this.GetType())
{
return false;
}
return Equals((DTOPersona) obj);
}
public override int GetHashCode()
{
return (Name != null ? Name.GetHashCode() : 0);
}
}
如果不添加一些比较逻辑,您将无法从数据的角度知道您的类实例是否与另一个相同。
为了检查所有字段是否具有相同的值,您可以覆盖Object.GetHashCode 和Object.Equals方法。
逐个字段进行比较也可以。