对象的Assert.AreEqual()失败

时间:2015-05-01 12:24:24

标签: c# nunit

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;
    }
}

1 个答案:

答案 0 :(得分:6)

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

一个简单的实现:

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

public override int GetHashCode()
{
    return amount;
}

顺便说一下,虽然我认识到代码几乎是逐字逐句的 Test Driven Development by Example ,但在C#中convention是方法和属性是Pascal的,所以{{1 }},TestMultiplicationTimes等。当你继续时,也许需要考虑一些事情。