Assert.AreEqual() 对象失败

Assert.AreEqual() for objects Fail

Assert.AreEqual() 对 2 个相同的对象失败。 获取错误为 :: Assert.AreEqual 失败。预期的:。实际的:。

示例如下:

[TestMethod]
public void testMultiplication()
{ 
    Dollar five = new Dollar(5);
    Assert.AreEqual(new Dollar(10), five.times(2));
    Assert.AreEqual(new Dollar(15), five.times(3));
}

class Dollar
{
    private int amount;

    public Dollar(int amount)
    {
        this.amount = amount;
    }

    public Dollar times(int multiplier)
    {
        return new Dollar(amount * multiplier);
    }

    public bool equals(Object obj)
    {
        Dollar dollar = (Dollar) obj; 
        return amount == dollar.amount;
    }
}

您需要在 Dollar覆盖 EqualsGetHashCode。默认值比较引用相等性,因此您的两个不同实例将不相同。您当前的 equals 方法将不会被使用。

一个简单的实现:

public override bool Equals(object obj)
{
    Dollar dollar = (Dollar) obj; 
    return amount == dollar.amount;
}

public override int GetHashCode()
{
    return amount;
}

顺便说一句,尽管我认识到代码几乎是逐字逐句地来自 示例测试驱动开发,但在 C# 中,convention 是方法和属性是 Pascal 大小写,所以 TestMultiplicationTimesEquals 等。在您继续时可能需要考虑一些事情。