我是否应该编写测试以证明删除代码可修复错误?


14

有时候,我会遇到这样的情况:修复错误需要删除一段代码。TDD的纯粹主义者会(我认为)提倡编写一个失败的测试,删除代码,然后查看测试通过。

现在,有一个测试断言某些代码已被删除真是很奇怪。当然,我想它可以确保没有人去研究源代码控制并将该代码放回去,但这值得吗?如果值得的话,它似乎比为已添加的代码编写测试要有价值,对吧?


8
我认为任何回归测试都是有用的,而不管该错误如何修复
Ismail Badawi

1
测试未断言代码已删除-测试断定该错误已修复...
user253751

Answers:


50

您正在以错误的方式看待它。测试没有断言代码已删除。该测试确实声明了某些功能。

该测试不关心通过它所需的代码量,也没有意识到您已经删除了一些代码。进行此类测试的价值与您因错误创建的任何其他测试的价值完全相同:您有信心在通过测试后就不会出现错误,并且将测试集成到构建过程中可以确保您将错误很可能不会被重新引入。

从TDD角度看它的另一种方法是:当您知道删除代码可以修复该错误,然后又想知道是否编写测试时,您就已经错了TDD。一旦开始处理错误,就应该首先编写测试,以确保通过失败来确保错误的存在。之后,您才修复实际的错误-可能需要删除代码或不删除代码-并通过测试。您所提出的问题甚至不会以这种方式出现。


3
+1,但我可以想象以下情况:删除的代码包含某些荒谬的功能,有人添加了一些无法正确理解问题域的功能。现在,在代码审查期间,另一位开发人员发现整个部分确实是胡扯,并且代码将被删除。针对此类废话行为进行大量测试可能会使您的测试套件肿。
布朗

2
显然,已删除的功能处理了一些输入/输出错误。显然,更进一步的人可能以相同的方式误解了这个问题。如果您担心测试套件膨胀,我认为TDD不适合您。什么是测试服膨胀?
Dorus

3
@DocBrown:如果他们在做TDD,那么必须进行一些要求荒谬的功能的测试,否则,甚至根本不允许他们编写该代码!请记住,只允许您编写绝对最小数量的代码才能通过测试。如果没有这样的测试,那么代码永远都不应该是一开始就编写的,可以将其删除。如果一个测试,力量,荒唐的行为,那么该测试应该被删除,现在我们是在我之前所描述的相同情况:测试走了,删除代码。
约尔格W¯¯米塔格

在这两种情况下,您都不会向测试套件中添加任何测试,而在第二种情况下,您甚至都删除了一个。但是,如果事实证明测试确实有意义,那么该功能毕竟不是那么荒谬。
约尔格W¯¯米塔格
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.