【发布时间】:2011-06-23 21:07:13
【问题描述】:
我是单元测试的新手,尤其是 NUit。 我只是在书中输入一些涉及 Java 和 JUnit 的示例。但我使用的是 C#。
问题是:我有一个带有重写方法的类,例如 Equals() 和 GetHashCode(),但是当我试图将这个类的两个对象与 Assert.AreEqual() 进行比较时,我的代码没有被调用,所以我得到一个例外。
Assert.True(MyClass.Equals(MyClass2)) 运行良好。但我不想使用这种结构来代替Assert.AreEqual()。问题可能出在哪里?
这是课程:
public class Money
{
public int amount;
protected string currency;
public Money(int amount, string currency)
{
this.amount = amount;
this.currency = currency;
}
public new bool Equals(object obj)
{
if (obj == null)
return false;
Money money = (Money)obj;
return (amount == money.amount)
&& (Currency().Equals(money.Currency()));
}
public new int GetHashCode()
{
return (string.Format("{0}{1}", amount, currency)).GetHashCode();
}
public static Money Dollar(int amount)
{
return new Money(amount, "USD");
}
public static Money Franc(int amount)
{
return new Money(amount, "CHF");
}
public Money Times(int multiplier)
{
return new Money(amount * multiplier, currency);
}
public string Currency()
{
return currency;
}
}
以及测试方法本身:
[TestFixture]
public class DollarTest
{
[Test]
public void TestMultiplication()
{
Money five = Money.Dollar(5);
Assert.True(Money.Dollar(10).Equals(five.Times(2))); // ok
Assert.AreEqual(Money.Dollar(10), five.Times(2)); // fails
}
}
【问题讨论】:
-
你试过公共覆盖 bool Equals() 吗?
-
@Samuel - 正确,但您需要切换修饰符和类型,即 public bool override Equals()
标签: c# unit-testing nunit