我正在测试两个对象(以及它们的集合),但即使它们具有相同的类型也会失败:
我做了一些研究,也许是因为参考文献,它们可能会有所不同。但是,它仍然是同一类型,我不知道使用什么Assert方法。 (CollectionAssert.AreEquivalent也失败了。)
被修改
我也在尝试检查每个字段的值是否相同,在这种情况下,我应该为每个字段执行Assert.AreEqual吗?
- 谢谢,所有答案都很有帮助
答案 0 :(得分:2)
您应该比较对象的类型。正确识别后,对象的内容可能会有所不同,因此不能认为它们是平等的。
尝试类似
的内容 Assert.AreEqual(typeof(ObjectA), typeof(ObjectB))
答案 1 :(得分:2)
Assert.AreEqual
检查两个对象是否相同,而不是它们只是相同的类型。要做到这一点,你会做:
Assert.AreEqual(A.GetType(), B.GetType());
答案 2 :(得分:2)
如果您想比较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);
}
}
答案 3 :(得分:0)
如果不添加一些比较逻辑,您将无法从数据的角度来了解您的类实例与另一个实例是否相同。
为了检查所有字段是否具有相同的值,您可以覆盖Object.GetHashCode和Object.Equals方法。
按字段比较进行字段也可以。