我正在写一份针对我编写的一些 .net 代码的单元测试。
我熟悉编写这样的代码:
int expected = 10;
int actual = multiplyByTwo(5);
Assert.AreEqual(expected, actual);
如果参数是整数,那么代码要做什么就很清楚了。
当传入的参数是对象时,这段代码该怎么做呢?
如果我写了一个名为MyClass
的自定义类,如何控制Assert.AreEqual
在使用MyClass
类型的对象时成功或失败?
我正在写一份针对我编写的一些 .net 代码的单元测试。
我熟悉编写这样的代码:
int expected = 10;
int actual = multiplyByTwo(5);
Assert.AreEqual(expected, actual);
如果参数是整数,那么代码要做什么就很清楚了。
当传入的参数是对象时,这段代码该怎么做呢?
如果我写了一个名为MyClass
的自定义类,如何控制Assert.AreEqual
在使用MyClass
类型的对象时成功或失败?
也就是说,对同一对象的两个引用将被视为相等;对同一对象的两个克隆将被视为不同。除非您重载了这些对象所属类的实例方法Equals()
或该类的==
运算符。
另请参见Reed Copsey的答案。
Assert.AreEqual使用相等运算符(==)进行测试,如上所定义。
Cat
的实例时,以下伪代码演示了这一点。var expected = GetExpectedInstance(); // returns the expected result
var actual = CallMethodUnderTest(); // get the actual result
var e = expected.XmlSerialize<Cat>();
var a = actual.XmlSerialize<Cat>();
Assert.AreEqual(e, a);