我有一个使用maven配置的庞大代码库。我的代码库被划分为不同的maven模块,因此我有一个主pom文件,每个子模块都有自己的pom文件。但这些模块仍然调用彼此的功能。Junit测试是为每个模块编写的。我正在使用Cobertura生成代码覆盖率。它为每个模块生成单独的覆盖率报告。当Cobertura为模块A生成代码覆盖率,并且模块A的特定代码被模块B的测试调用时。在这种情况下,Cobertur将模块A的代码标记为未覆盖。这是预期的行为吗?或者我的配置错误?
Maven-Cobertura子模块配置:
构建部分:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>${org.codehaus.mojo.cobertura-maven-plugin.version}</version>
</plugin>
报告部分:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>cobertura-maven-plugin</artifactId>
<version>${org.codehaus.mojo.cobertura-maven-plugin.version}</version>
<configuration>
<formats>
<format>xml</format>
</formats>
</configuration>
</plugin>
运行Cobertura报告的命令:
mvn cobertura:cobertura
我建议您尝试用于运行时覆盖生成的JaCoCo代码覆盖工具,它更容易实现,并且在代码覆盖方面更具表现力[包、类、方法、行]。与Cobertura相比,它提供了更多功能。我尝试了JaCoCo和其他工具,发现与其他工具相比,JaCoCo生成的报告更容易理解和有用。
参考:https://confluence.atlassian.com/display/CLOVER/Comparison+的+代码+覆盖范围+工具需要使用jacoco.exec文件生成代码覆盖率报告