Assert.AreEqual失败并且类型相同

时间:2012-12-11 17:46:38

标签: c# asp.net .net unit-testing assert

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

enter image description here

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

被修改

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

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

4 个答案:

答案 0 :(得分:2)

您应该比较对象的类型。正确识别后,对象的内容可能会有所不同,因此不能认为它们是平等的。

尝试类似

的内容

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

答案 1 :(得分:2)

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

Assert.AreEqual(A.GetType(), B.GetType());

答案 2 :(得分: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);
    }
}

答案 3 :(得分:0)

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

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

按字段比较进行字段也可以。