是否有一个Java工具,在给定一组JUnit测试和一个要测试的类的情况下,它会告诉您哪些类的行经过了测试?即。要求测试成功运行。我的意思并不是“代码覆盖率”,它只会告诉您是否执行了一行,而是更强大的代码:测试所需的行是否通过?
我经常注释掉一行代码并运行一个测试,看看测试是否真的在测试那行代码。我认为这可以通过一个半智能工具自动完成(例如,类似IDE的东西,可以解决从方法中删除的内容,同时保持其可编辑性)。
答案 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)
答案 3 :(得分:2)
我爱cobertura,因为生成的报告是恕我直言最美的。它有自己的蚂蚁目标!
与艾玛相比,它还具有分支覆盖范围,而不仅仅是线路覆盖范围,这经常会产生误导。