一句话,被测试方法的返回类型的对应的类,必须覆盖Equals()方法。
//返回类型
class myObject
{
public int data;
}
//被测试方法
public myObject objectAdd(myObject opnd1, myObject opnd2)
{
myObject result = new myObject();
result.data = opnd1.data + opnd2.data;
return result;
}
//被测试方法的单元测试函数
/// <summary>
///objectAdd 的测试
///</summary>
[TestMethod()]
public void objectAddTest()
{
Calculator target = new Calculator(); // TODO: 初始化为适当的值
myObject opnd1 = new myObject(); // TODO: 初始化为适当的值
opnd1.data = 1;
myObject opnd2 = new myObject(); // TODO: 初始化为适当的值
opnd2.data = 2;
myObject expected = new myObject(); // TODO: 初始化为适当的值
expected.data = 3;
myObject actual;
actual = target.objectAdd(opnd1, opnd2);
Assert.AreEqual(expected, actual);
//Assert.Inconclusive("验证此测试方法的正确性。");
}
objectAdd()方法的单元测试方法将永远测试失败。后来我猜测Assert.AreEqual()方法调用了Equals方法来判别两个对象是否一样。但是类如果没有重新覆盖Object类的Equals()方法的话,那么调用的将是原始的Equals()方法,这个方法只看两个引用变量指向的对象的地址是否一样,不看其他的。
所以没有特殊要求,如果需要在测试时比较两个对象的内容是否一样的话,得覆盖Object类的Equals()方法,比较引用所指向的对象的内容,而不是引用所指向的对象的地址是否一样!
示例覆盖如下:
class myObject
{
public int data;
public override bool Equals(object o)
{
if (data == ((myObject)o).data) return true;
return false;
}
}
这样便可以对返回类型为类类型的方法进行合理的测试。