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