Я новичок в модульном тестировании и в частности NUit. Я просто набираю несколько примеров из книги, которая относится к Java и JUnit. Но вместо этого я использую С#.
Проблема в том, что у меня есть класс с переопределенными методами, такими как 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
}
}