我的应用程序有一个 Maven 测试项目。
JUnit 测试运行良好,代码覆盖率测试也运行良好。
但报告总是显示 0% 的代码覆盖率。
我应该怎么办?
根据官方网站,Eclemma是 Eclipse 的代码覆盖插件,基于 JaCoCo 库。
由于您想在 eclipse 之外使用相同的代码覆盖引擎,您应该在项目的 Maven 配置 (pom) 中包含插件Jacoco,如下所示(此代码是从敏捷工程博客复制的):
<build>
<plugins>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.6.0.201210061924</version>
<executions>
<execution>
<id>jacoco-initialize</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>jacoco-site</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
要运行测试,只需在命令行工具上键入以下内容:
mvn clean test
现在我意识到您只想使用 Eclipse 中的工具获取报告...
Eclipse 对话框中的代码覆盖率如何?您是否尝试使用鼠标右键单击此对话框来导出会话(报告),或在File -> Export中?
以防万一您忘记执行以下操作:
我不确定问题的原因是什么,因为它总是对我有用。您是否从 Eclipse 本身安装了它?尝试卸载它,然后从 eclipse 重新安装。以下是如何做到以防万一:
如果你使用 eclemma,你需要添加 jacoco 依赖。如果已添加 jacoco,但您仍然面临此问题,请参阅eclemma 常见问题解答:“为什么一个类显示为未覆盖,尽管它已被执行?”
它说,
首先确保已收集到执行数据。为此,请选择 HTML 报告右上角的 Sessions 链接,并检查是否列出了相关类。如果它在执行时列出但未链接,则该类是不同的类文件。确保您在运行时使用与生成报告完全相同的类文件。请注意,某些工具(例如 EJB 容器、模拟框架)可能会在运行时修改您的类文件。
所以,Mockito / PowerMockito 可能会导致这个问题。就我而言,我在@PrepareForTest() 中添加了该类。我被证明测试用例执行得很好,没有错误,但 Jacoco 并没有提高其报告中的代码覆盖率。
最后,从 @PrepareForTest() 注释中删除类改进了代码覆盖率。检查您是否添加了它,如果添加了它,请将其从注释中删除。
我刚刚遇到这个问题,它是由错误配置的类路径引起的。执行单元测试时,它们是针对已编译的 jar(在 eclipse 之外编译的实际源代码)而不是我的实际源代码执行的。从我的类路径中删除 jar 后,单元测试正确地命中了我的包源。
我能够通过在测试用例顶部调用类的实例来解决我的问题。IE
public hotelOccupancy hotel = new hotelOccupancy();
@Test
public void testName() {
// some test here
}
一旦我这样做了,我的所有报道都开始工作并且问题得到解决。
我正在使用 eclemma 2.3.2,它在 eclipse 上运行良好
我只需要在我的 pom.xml 中添加这些依赖项
<dependency>
<groupId>org.jboss.arquillian.extension</groupId>
<artifactId>arquillian-jacoco</artifactId>
<version>1.0.0.Alpha6</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jacoco</groupId>
<artifactId>org.jacoco.core</artifactId>
<version>0.7.1.201405082137</version>
<scope>test</scope>
</dependency>
然后我构建项目,更新 maven 项目配置并按预期运行覆盖插件