Eclemma总是报告0%的代码覆盖率

时间:2012-12-18 11:43:39

标签: java eclemma

我的应用程序有一个Maven测试项目。

JUnit测试运行正常,代码覆盖率测试也运行。

但报告始终显示0%的代码覆盖率。

我该怎么办?

8 个答案:

答案 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

p.s:您还可以使用其他代码覆盖插件,例如CoberturaEmma

答案 1 :(得分:2)

万一你忘记这样做了:

  1. 您是否使用@Test注释您的测试?
  2. 您是将该类作为JUnit测试用例运行还是从coverage按钮运行?
  3. 我不确定问题的原因是什么,因为它总是对我有用。你有没有从eclipse本身安装它?尝试卸载它,然后从eclipse重新安装。以下是如何做到这一点:

    1. 在Eclipse中,点击“帮助”&gt; “安装新软件”
    2. 点击“添加”,然后输入以下内容:
    3. 选择EclEmma,然后安装

答案 2 :(得分:2)

现在我意识到您只想使用Eclipse中的工具获取报告...

Eclipse Dialog中的代码覆盖率如何?您是否尝试使用mouse right click on this dialog to export session (report)File -> Export内部?

答案 3 :(得分:2)

多年来这是一个众所周知的问题,遗憾的是还没有正式的解决方案。

您可以看到它hereherehere

一个不那么亲爱的解决方案可能是尝试使用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插件