我是新手,尤其是单元测试和NUit。 我只是在书中提到了一些引用Java和JUnit的例子。但我正在使用C#。NUnit不适用于Assert.AreEqual
的问题是:我有与被覆盖的方法,如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
}
}
你试过用公共覆盖布尔Equals()吗? –
@Samuel - 正确,但你需要切换修饰符和类型,即公共布尔覆盖Equals() – Fraser