假设我们通过使用预期结果对象的属性断言结果对象的所有属性的相等性来测试方法的结果。我们应该实现equals方法并使用Assert.AreEqual(expectedResult,actualResult)......但是equals可能意味着生产代码中存在不同的东西。
哪种做法最好?
或
答案 0 :(得分:21)
我一个人使用自定义断言。主要有两个原因:
equals
的含义可能与生产代码的含义不一致; 答案 1 :(得分:4)
如果您正在测试返回值对象(例如,货币值,元组或映射)的方法或函数的返回值,那么检查结果对象是否等于预期值是有意义的结果对象。在这种情况下,equals的标准实现应该做你想要的。
同时,如果你在某个对象上调用mutator,然后检查它是否按预期变异了对象,我认为只检查那些应该被更改的对象的属性更有意义。这可以防止您不得不对equals进行自定义定义,这无论如何都会模糊您在测试中预期发生的事情。
答案 2 :(得分:3)
我不认为这个问题与标准的做事方式有关。这是一个考虑你的测试应该测试什么的问题。
如果要测试所有属性是否相等,请断言所有属性的相等性。
如果要测试整个对象的Equals
方法的返回值,请改为断言。