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;
}
}
答案 0 :(得分:6)
您需要在Equals
中覆盖 GetHashCode
和Dollar
。默认值比较引用相等性,因此您的两个不同实例将不相同。您的当前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 }},TestMultiplication
,Times
等。当你继续时,也许需要考虑一些事情。