我正试图让Cobertura使用我的Ant构建,特别是希望它能为我的单元测试提供一份覆盖率报告。我使用以下目录结构:
src/main/java --> main source root
src/test/java --> test source root
bin/main --> where main source compiles to
bin/test --> where test source compiles to
gen/cobertura --> cobertura root
gen/cobertura/instrumented --> where "instrumented" class will be copied to
我对Cobertura(,如果我错了,请纠正我!!)的理解是,它将字节码添加到已编译的类中(也称为"插入"),然后基于注入/编织的字节码运行报告。
因此,我的问题是,如果Cobertura更改了类的字节码及其检测,我应该在<cobertura:instrument>
之前或之后在测试源上运行JUnit吗?为什么
Cobertura插入编译类的字节码是正确的。您通常希望将测试源排除在覆盖率分析之外,因为测试类实际上是生成覆盖率的驱动程序。Cobertura提供的基本示例build.xml在调用Cobertura仪器时提供了一个很好的示例:
<cobertura-instrument todir="${instrumented.dir}">
<!--
The following line causes instrument to ignore any
source line containing a reference to log4j, for the
purposes of coverage reporting.
-->
<ignore regex="org.apache.log4j.*" />
<fileset dir="${classes.dir}">
<!--
Instrument all the application classes, but
don't instrument the test classes.
-->
<include name="**/*.class" />
<exclude name="**/*Test.class" />
</fileset>
</cobertura-instrument>
</target>
这里的exclude元素排除了所有名称中带有"Test"的类。
下面是一个如何将Cobertura ANT任务与Junit结合使用以生成代码覆盖率报告的工作示例
SONAR-使用Cobertura 测量代码覆盖率