我有一个Coordinate
类,它有一个add(Coordinate)
方法。在为此类编写单元测试时,我对assertEqual
结果进行了测试:
a = Coordinate(1,2,3)
b = Coordinate(5,6,7)
result = a.add(b)
assertEqual(result.x, 6)
assertEqual(result.y, 8)
assertEqual(result.z,10)
我可以很容易地“伪造”这个:
def add(self, other):
return Coordinate(6,8,10)
这是测试失败的最简单的解决方案。下一步是编写第二个测试,以防止我以这种方式伪造它。我可以:
assertEqual
用不同的数字编写另一个测试(所以假装Coordinate(6,8,10)
不通过,或者- 使用两个不同的输入编写
assertNotEqual
测试,确保结果不是6,8,10
.
如果我编写一个assertEquals
测试,我会得到两个看起来非常非常相似的测试。这是一个问题吗?如果我在项目中看到类似的代码,我会很想重构它。我是否也应该为测试代码这样做 - 如果是这样,这是否意味着每对测试最终都会被重构?
如果我写一个assertNotEqual
,测试只是测试“假结果”——我很确定这永远不会来自算法错误。本质上,一旦我编写了测试,就停止伪造结果,这样两个测试都通过了,assertNotEquals
测试可以安全地删除,我仍然对代码有信心——所以我会编写测试,修复假的,删除测试,这似乎很愚蠢。
在这种情况下我应该怎么做?