Assert.AreEqual() 对象失败
Assert.AreEqual() for objects Fail
Assert.AreEqual() 对 2 个相同的对象失败。
获取错误为 ::
Assert.AreEqual 失败。预期的:。实际的:。
示例如下:
[TestMethod]
public void testMultiplication()
{
Dollar five = new Dollar(5);
Assert.AreEqual(new Dollar(10), five.times(2));
Assert.AreEqual(new Dollar(15), five.times(3));
}
class Dollar
{
private int amount;
public Dollar(int amount)
{
this.amount = amount;
}
public Dollar times(int multiplier)
{
return new Dollar(amount * multiplier);
}
public bool equals(Object obj)
{
Dollar dollar = (Dollar) obj;
return amount == dollar.amount;
}
}
您需要在 Dollar
中 覆盖 Equals
和 GetHashCode
。默认值比较引用相等性,因此您的两个不同实例将不相同。您当前的 equals
方法将不会被使用。
一个简单的实现:
public override bool Equals(object obj)
{
Dollar dollar = (Dollar) obj;
return amount == dollar.amount;
}
public override int GetHashCode()
{
return amount;
}
顺便说一句,尽管我认识到代码几乎是逐字逐句地来自 示例测试驱动开发,但在 C# 中,convention 是方法和属性是 Pascal 大小写,所以 TestMultiplication
、Times
、Equals
等。在您继续时可能需要考虑一些事情。
Assert.AreEqual() 对 2 个相同的对象失败。 获取错误为 :: Assert.AreEqual 失败。预期的:。实际的:。
示例如下:
[TestMethod]
public void testMultiplication()
{
Dollar five = new Dollar(5);
Assert.AreEqual(new Dollar(10), five.times(2));
Assert.AreEqual(new Dollar(15), five.times(3));
}
class Dollar
{
private int amount;
public Dollar(int amount)
{
this.amount = amount;
}
public Dollar times(int multiplier)
{
return new Dollar(amount * multiplier);
}
public bool equals(Object obj)
{
Dollar dollar = (Dollar) obj;
return amount == dollar.amount;
}
}
您需要在 Dollar
中 覆盖 Equals
和 GetHashCode
。默认值比较引用相等性,因此您的两个不同实例将不相同。您当前的 equals
方法将不会被使用。
一个简单的实现:
public override bool Equals(object obj)
{
Dollar dollar = (Dollar) obj;
return amount == dollar.amount;
}
public override int GetHashCode()
{
return amount;
}
顺便说一句,尽管我认识到代码几乎是逐字逐句地来自 示例测试驱动开发,但在 C# 中,convention 是方法和属性是 Pascal 大小写,所以 TestMultiplication
、Times
、Equals
等。在您继续时可能需要考虑一些事情。