11

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

JUnit 测试运行良好,代码覆盖率测试也运行良好。

但报告总是显示 0% 的代码覆盖率。

我应该怎么办?

4

8 回答 8

5

根据官方网站,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

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

于 2013-01-02T02:27:16.877 回答
2

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

Eclipse 对话框中的代码覆盖率如何?您是否尝试使用鼠标右键单击此对话框来导出会话(报告),或在File -> Export中?

于 2013-01-02T02:54:14.193 回答
2

以防万一您忘记执行以下操作:

  1. 您是否使用 @Test 注释您的测试?
  2. 您是作为 JUnit 测试用例还是从覆盖按钮运行该类?

我不确定问题的原因是什么,因为它总是对我有用。您是否从 Eclipse 本身安装了它?尝试卸载它,然后从 eclipse 重新安装。以下是如何做到以防万一:

  1. 在 Eclipse 中,单击“帮助”>“安装新软件”
  2. 单击“添加”,然后键入以下内容:
  3. 选择 EclEmma,然后安装
于 2012-12-18T13:40:23.170 回答
2

这是多年来的一个已知问题,不幸的是还没有官方的解决方案。

你可以在这里这里这里看到它

一种不太好的解决方案可能是尝试使用eCobertura (或将 eclemma 从 2.x 降级到 1.x)

于 2015-12-02T16:25:10.447 回答
1

如果你使用 eclemma,你需要添加 jacoco 依赖。如果已添加 jacoco,但您仍然面临此问题,请参阅eclemma 常见问题解答:“为什么一个类显示为未覆盖,尽管它已被执行?”

它说,

首先确保已收集到执行数据。为此,请选择 HTML 报告右上角的 Sessions 链接,并检查是否列出了相关类。如果它在执行时列出但未链接,则该类是不同的类文件。确保您在运行时使用与生成报告完全相同的类文件。请注意,某些工具(例如 EJB 容器、模拟框架)可能会在运行时修改您的类文件。

所以,Mockito / PowerMockito 可能会导致这个问题。就我而言,我在@PrepareForTest() 中添加了该类。我被证明测试用例执行得很好,没有错误,但 Jacoco 并没有提高其报告中的代码覆盖率。

最后,从 @PrepareForTest() 注释中删除类改进了代码覆盖率。检查您是否添加了它,如果添加了它,请将其从注释中删除。

于 2017-02-07T14:07:45.387 回答
0

我刚刚遇到这个问题,它是由错误配置的类路径引起的。执行单元测试时,它们是针对已编译的 jar(在 eclipse 之外编译的实际源代码)而不是我的实际源代码执行的。从我的类路径中删除 jar 后,单元测试正确地命中了我的包源。

于 2016-07-12T23:48:34.027 回答
-1

我能够通过在测试用例顶部调用类的实例来解决我的问题。IE

public hotelOccupancy hotel = new hotelOccupancy();

@Test
public void testName() {
    // some test here
}

一旦我这样做了,我的所有报道都开始工作并且问题得到解决。

于 2017-10-26T04:30:05.200 回答
-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 项目配置并按预期运行覆盖插件

于 2016-02-17T10:50:24.670 回答