c# - NUnit 测试错误?预期为 <MyType> 但为 <MyType>

标签 c# unit-testing nunit

[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/

相关文章:

c# - 将弹出窗口保持在窗口范围内

c# - 如何使具有相同数据的对象具有相同的键?

Python unittest - 与assertRaises相反?

objective-c - isKindOfClass : returns false negative in unit test bundle

c# - 无法连接到运行 c# 测试的服务器 (Nunit)

c# - 在同一个模拟实例上断言对公共(public)方法的调用

c# - XML 序列化 - 何时使用 DataContractSerializer/Binary/XMLSerialiser

c# - 为什么 Task.Factory.StartNew 立即返回而 Task.Run 没有?

iphone - 测试包含同步和其他网络请求的产品

c# - VS 11 单元测试框架