是否有一个Java工具可以找到特定JUnit测试的哪些代码行?

时间:2010-09-09 12:26:49

标签: java junit

是否有一个Java工具,在给定一组JUnit测试和一个要测试的类的情况下,它会告诉您哪些类的行经过了测试?即。要求测试成功运行。我的意思并不是“代码覆盖率”,它只会告诉您是否执行了一行,而是更强大的代码:测试所需的行是否通过?

我经常注释掉一行代码并运行一个测试,看看测试是否真的在测试那行代码。我认为这可以通过一个半智能工具自动完成(例如,类似IDE的东西,可以解决从方法中删除的内容,同时保持其可编辑性)。

4 个答案:

答案 0 :(得分:4)

有一个名为Jester的开源变异测试工具,可以更改源代码行,然后运行测试,并报告测试是否通过。与代码覆盖率工具相比,您更接近于您所寻找的内容。

  

Jester是测试java JUnit测试的测试测试程序(Pester用于Python PyUnit测试)。它修改了您的源代码,运行测试和报告,如果测试通过,尽管代码发生了变化。这可能表示缺少测试或冗余代码。

关于在纯TDD项目中是否需要这些工具的讨论,在Jester项目网页上有一个关于在TDD会话期间编写代码时使用Jester的好处的帖子(Uncle Bob臭名昭着的保龄球TDD示例) )。

答案 1 :(得分:3)

您正在寻找的内容可能被称为mutation testing。虽然突变测试不会告诉您本身需要通过哪些代码行。变异测试的作用是修改源代码,寻找可以对代码进行的更改,但测试仍然通过。例如。改变

if (a < b)

if (a >= b)

并查看测试是否仍然通过。这将突出您测试中的弱点。

另一个用于突变测试的java库是jumble

答案 2 :(得分:2)

我在大多数项目中使用emma。我将它包含在我的ant构建文件中,并为报告生成html文件

我读过但尚未尝试过的其他两个报道项目是clovercobertura

答案 3 :(得分:2)

我爱cobertura,因为生成的报告是恕我直言最美的。它有自己的蚂蚁目标!

与艾玛相比,它还具有分支覆盖范围,而不仅仅是线路覆盖范围,这经常会产生误导。