1

我正在测试两个对象(以及它们的集合),但即使它们具有相同的类型,它也会失败:

在此处输入图像描述

我做了一些研究,这可能是因为参考文献可能有所不同。但是,它仍然是同一类型,我不知道要使用什么 Assert 方法。(CollectionAssert.AreEquivalent 也失败了)。

已编辑

我也在尝试检查每个字段的值是否相同,在这种情况下,我应该为每个字段执行 Assert.AreEqual 吗?

- 谢谢,所有的答案都有帮助

4

4 回答 4

3

您应该比较对象的类型。正如您正确识别的那样,对象的内容可能不同,因此它们不能被视为相等。

尝试类似的东西

Assert.AreEqual(typeof(ObjectA), typeof(ObjectB))

于 2012-12-11T17:48:37.970 回答
3

Assert.AreEqual检查两个对象是否相同,而不是它们只是同一类型。要做到这一点,你会这样做:

Assert.AreEqual(A.GetType(), B.GetType());
于 2012-12-11T17:49:28.720 回答
2

如果要比较 dto 对象的值,则必须覆盖EqualsGetHashCode方法。

例如给定类:

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);
    }
}
于 2012-12-11T17:56:04.233 回答
0

如果不添加一些比较逻辑,您将无法从数据的角度知道您的类实例是否与另一个相同。

为了检查所有字段是否具有相同的值,您可以覆盖Object.GetHashCodeObject.Equals方法。

逐个字段进行比较也可以。

于 2012-12-11T17:57:13.493 回答