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

是否有一个Java工具可以发现哪些代码行是由特定的JUnit测试测试的?,java,junit,Java,Junit,有没有一个Java工具,在给定一组JUnit测试和一个要测试的类的情况下,它会告诉您这些测试测试了类的哪些行?即,需要出席才能成功运行测试。我不是说“代码覆盖率”,它只告诉您是否执行了一行代码,而是更重要的一点:测试是否需要该行代码才能通过 我经常注释掉一行代码,然后运行一个测试,看看测试是否真的在测试这行代码。我认为这可以通过一个半智能工具自动完成(例如,像IDE这样的工具,它可以在保持方法可编译的同时计算出可以从方法中删除的内容)。我在我的大多数项目中都使用它。我将它包含在我的ant构建文件

有没有一个Java工具,在给定一组JUnit测试和一个要测试的类的情况下,它会告诉您这些测试测试了类的哪些行?即,需要出席才能成功运行测试。我不是说“代码覆盖率”,它只告诉您是否执行了一行代码,而是更重要的一点:测试是否需要该行代码才能通过

我经常注释掉一行代码,然后运行一个测试,看看测试是否真的在测试这行代码。我认为这可以通过一个半智能工具自动完成(例如,像IDE这样的工具,它可以在保持方法可编译的同时计算出可以从方法中删除的内容)。

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


另外两个我读过但还没有尝试过的报道项目是或

我喜欢cobertura,因为生成的报告是最漂亮的。它有自己的蚂蚁目标


与emma相比,它还有分支机构覆盖范围,而不仅仅是线路覆盖范围,这常常会产生误导

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

Jester是用于测试java JUnit测试的测试人员(Pester用于Python PyUnit测试)。它修改您的源代码,运行测试并报告测试是否通过,尽管代码发生了更改。这可能表示缺少测试或冗余代码


关于纯TDD项目是否需要这些工具的讨论,Jester项目网页上有一个链接,链接到一篇关于在TDD会话期间编写代码时使用Jester的好处的帖子(Bob叔叔臭名昭著的bowling TDD示例)。

您正在寻找的可能被称为。而变异测试本身不会告诉你需要通过哪些代码行。突变测试所做的是修改源代码,寻找它可以对代码进行的更改,但测试仍然通过。例如改变

if (a < b)
看看测试是否仍然通过。这将突出你测试中的弱点


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

作为旁注,我相信纯TDD将消除对此类工具的需要,但在为现有(遗留)代码编写单元测试时,它确实非常方便。@péter只有当您可以从头开始,但始终存在遗留代码时才正确;)@fielding,如果您已经有了代码(但没有单元测试),根据定义,您不能进行TDD。当然,这是常见的情况(唉),但这不是重点。@Nathan,使用覆盖率工具从来没有坏处,但是IMHO TDD(如果做得好)确保您只编写有(至少一个)单元测试的代码。Cobertura非常适合代码覆盖率,但我认为OP正在寻找断言覆盖率。例如,您可以拥有100%的代码覆盖率,但不断言任何内容。OP正在寻找一种工具来帮助识别缺少断言的地方。
if (a >= b)