编写重现错误的测试的最佳实践

时间:2014-03-26 10:01:50

标签: testing regression

我正在努力解决如何编写重现尚未解决的问题的测试方法。

如果有人编写测试并使用错误的期望,一旦修复了错误,开发人员就会看到失败并调整期望,或者只是用正确的期望编写测试并禁用它。一旦修复,你必须再次启用它。

我更喜欢定义错误期望的方式,并在评论中添加正确的期望,一旦我解决了问题,我会立即收到通知,告知它失败了。如果我禁用它,我将不会看到它失败,它可能会保持禁用状态,直到有人发现这个测试。

还有其他方法吗?

感谢您的评论。

马丁

3 个答案:

答案 0 :(得分:2)

理想情况下,您会编写一个测试来重现该错误,然后修复该错误。

如果由于某种原因目前不是一种选择,我会说你的错误期望的方法比忽略测试更好。假设您使用一些明确的变量名称/方法名称/注释,测试更多地是占位符而不是期望的结果。

我做过的一件事就是写一个测试时间炸弹""提醒。我选择了一个几周/几个月的日期,我希望能够回到它或者修复它。如果我最终必须将日期推出2或3次,我最终会删除测试,因为它一定不是那么重要。

答案 1 :(得分:0)

正如@Jarred所说,最好的方法是编写一个表达正确期望的测试,检查它是否失败,然后修复生产代码并查看测试通过。

如果它不是一个选项,那么请记住,测试不仅要测试,还要测试文档。所以写一个测试文档来记录你的程序是如何工作的。如有必要,请在测试中添加注释。并且不要编写被忽略的测试 - 这是毫无意义的。将来你可以多次重构你的代码,你可能会意外修复这个测试或在这方面引入更多的错误。编写旨在长期忽略的测试只是浪费时间。

不要害怕你会忘记那个特定的错误/测试,只需在你的问题跟踪系统中创建一张票 - 这就是它的用途。

如果您使用支持组的测试框架,您可以添加所有这些测试,以便在需要时立即排除这些测试。

我也真的不喜欢“定时炸弹测试”的概念。你的构建必须是可重现的 - 这是发布管理,持续集成,将代码传递给另一个团队的能力等的基本假设。测试不是为了跟踪和提醒问题,而是问题跟踪系统的工作。说真的,不要这样做

答案 2 :(得分:0)

其实我又想过这件事。我们正在使用JUnit,它支持通过@Test定义对异常的期望(expected = Exception.class)。

所以可以做的是用期望的期望编写测试并用@Test定义测试(expected = AssertionError.class)。一旦测试得到修复,测试就会失败,开发人员必须消除期望。