NUnit não funciona bem com Assert.AreEqual
Eu sou novo no teste de unidade e no NUit em particular. Eu estou apenas digitando alguns exemplos do livro que se refere a Java e JUnit. Mas estou usando c # em vez disso.
O problema é: eu tenho uma classe com métodos overriden comoEquals()
eGetHashCode()
, mas quando estou tentando comparar dois objetos dessa classe comAssert.AreEqual()
Meu código não é chamado, então eu recebo uma exceção.
Assert.True(MyClass.Equals(MyClass2))
funciona bem. Mas eu não quero usar essa construção em vez deAssert.AreEqual()
. Onde o problema pode estar?
Aqui está a aula:
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;
}
}
E o método de teste em si:
[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
}
}