Tôi mới dùng thử đơn vị và NUit nói riêng. Tôi chỉ cần nhập một số ví dụ từ sách đề cập đến Java và JUnit. Nhưng tôi đang sử dụng C# thay thế.NUnit không hoạt động tốt với Assert.AreEqual
Vấn đề là: Tôi đã có một lớp học với phương pháp overriden như Equals()
và GetHashCode()
, nhưng khi tôi đang cố gắng để so sánh hai đối tượng của lớp này với Assert.AreEqual()
mã của tôi không được gọi, vì vậy tôi có được một ngoại lệ.
Assert.True(MyClass.Equals(MyClass2))
hoạt động tốt. Nhưng tôi không muốn sử dụng công trình này thay vì Assert.AreEqual()
. Vấn đề có thể ở đâu?
Đây là lớp:
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;
}
}
Và phương pháp thử nghiệm bản thân:
[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
}
}
bạn đã thử với công cụ ghi đè bool Equals() chưa? –
@Samuel - đúng, nhưng bạn sẽ cần phải chuyển đổi công cụ sửa đổi và loại i.e. bool override công cộng Equals() – Fraser