[Test]
public void testMultiplication()
{
var five=new Dollar(5);
Assert.AreEqual(new Dollar(10), five.times(2));
Assert.AreEqual(new Dollar(15), five.times(3));
}
美元等级
public 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 theObject)
{
Dollar dollar = (Dollar) theObject;
return amount == dollar.amount;
}
}
在线 Assert.AreEqual(new Dollar(10), five.times(2));测试失败并出现错误:
预期:TDDbooks.Dollar
但是是:TDDbooks.Dollar
最佳答案
Assert.AreEquals
方法将使用Equals
方法来测试相等性。 Dollar
类型没有覆盖 Object.Equals
,而是定义了一个新的 equals
方法,该方法不参与 .Net 对象相等性。因此它没有被使用,并且测试使用了失败的引用相等性。要解决此问题,您需要覆盖 Object.Equals
方法
public override bool Equals(object obj) {
Dollar other = obj as Dollar;
if (other == null) {
return false;
}
return amount == other.amount;
}
关于c# - NUnit 测试错误?预期为 <MyType> 但为 <MyType>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13014385/