我的应用程序有一个Maven测试项目。
JUnit测试运行正常,代码覆盖率测试也运行。
但报告始终显示0%的代码覆盖率。
我该怎么办?
答案 0 :(得分:5)
根据官方网站,Eclemma是Eclipse的代码覆盖插件,基于JaCoCo库。
由于您希望在eclipse之外使用相同的代码覆盖引擎,您应该在项目的Maven配置(pom)中包含插件Jacoco,如下所示(this code was copied from the Agile Engineering blog):
<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
答案 1 :(得分:2)
万一你忘记这样做了:
我不确定问题的原因是什么,因为它总是对我有用。你有没有从eclipse本身安装它?尝试卸载它,然后从eclipse重新安装。以下是如何做到这一点:
答案 2 :(得分:2)
现在我意识到您只想使用Eclipse中的工具获取报告...
Eclipse Dialog中的代码覆盖率如何?您是否尝试使用mouse right click on this dialog to export session (report)或File -> Export内部?
答案 3 :(得分:2)
多年来这是一个众所周知的问题,遗憾的是还没有正式的解决方案。
一个不那么亲爱的解决方案可能是尝试使用eCobertura(或将2.x的eclemma降级为1.x)
答案 4 :(得分:1)
如果您使用的是eclemma,则需要添加jacoco依赖项。如果已添加jacoco,但您仍然遇到此问题,请参阅eclemma faq: "Why does a class show as not covered although it has been executed?"
它说,
首先确保已收集执行数据。为此,请选择HTML报告右上角的“会话”链接,并检查是否列出了相关课程。如果列出但未链接,则执行时的类是不同的类文件。确保您在运行时使用与报告生成完全相同的类文件。请注意,某些工具(例如EJB容器,模拟框架)可能会在运行时修改您的类文件。
因此,Mockito / PowerMockito可能会导致此问题。您可能已经实例化了要测试的类,并对该对象执行了PowerMockito.spy()。您将看到测试用例执行正常且没有错误,但Jacoco未能在其报告中改进代码覆盖率。
你不应该把你正在测试的类放在@PrepareForTest()注释中。检查是否已添加它并从注释中删除它。
答案 5 :(得分:0)
我刚遇到此问题,这是由错误配置的类路径引起的。执行单元测试时,它们是针对编译的jar(在eclipse之外编译的实际源代码)而不是我的实际源代码执行的。从我的类路径中删除jar后,单元测试正确地命中了我的包源。
答案 6 :(得分:0)
我能够通过在测试用例的顶部调用类的实例来解决我的问题。 即
public hotelOccupancy hotel = new hotelOccupancy();
@Test
public void testName() {
// some test here
}
一旦我这样做,我的所有报道都开始有效,问题就解决了。
答案 7 :(得分:-2)
我正在使用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项目配置并按预期运行coverage插件