【问题标题】:How do I generate a JaCoCo report for a JAR file?如何为 JAR 文件生成 JaCoCo 报告?
【发布时间】:2022-04-25 00:01:16
【问题描述】:

我们正在尝试针对使用 JaCoCo 的预打包 JAR 文件报告测试的代码覆盖率。为此,我们使用带有附加参数的 java -jar 启动 JAR 文件:

-javaagent:${project.basedir}/tools/jacocoagent.jar=output=tcpserver,port=${jacoco.port}

JaCoCo 的 Maven 插件被配置为然后转储执行文件并报告结果:

<plugin>
    <groupId>org.jacoco</groupId>
    <artifactId>jacoco-maven-plugin</artifactId>
    <version>0.8.0</version>
    <executions>
        <execution>
            <id>dumpData</id>
            <phase>post-integration-test</phase>
            <goals>
                <goal>dump</goal>
            </goals>
            <configuration>
                <address>localhost</address>
                <port>${jacoco.port}</port>
                <destFile>target/jacoco.exec</destFile>
            </configuration>
        </execution>
        <execution>
            <id>report</id>
            <phase>verify</phase>
            <goals>
                <goal>report</goal>
            </goals>
            <configuration>
                <dataFile>target/jacoco.exec</dataFile>
            </configuration>
        </execution>
    </executions>
</plugin>

这会产生一个jacoco.exec 文件,该文件具有非零大小(~350kB)。

但报告显示根本没有报道。在“会话”链接之后,我可以看到列出的 JAR 中的类,但报告的主页显示了这一点:

根据我们拥有的日志,代码似乎已被执行。 JaCoCo 设置中是否缺少步骤或者这应该有效吗?

【问题讨论】:

  • 我不确定你想用 -javaagent 实现什么。它应该从测试中得到覆盖——你读过baeldung.com/jacoco 吗?因此,在 Maven 构建期间,您正在运行测试并基于这些测试测量覆盖率。这是我所知道的典型用法......
  • 我正在对已构建的 JAR 文件进行黑盒测试。我们正在启动一个 Spring Boot 应用程序并使用 HTTP 请求来访问它,我正在尝试测量它的代码覆盖率。不是典型的用法,但据我了解文档应该是可行的。也许我错了。
  • 我没有这方面的经验,也许你可以看看carlosbecker.com/posts/production-code-coverage-jacoco ;-)
  • 从 CLI 工具运行报告,将“--classfiles”指向 JAR,我得到一个异常“分析时出错 ....app.jar@BOOT-INF/lib/aopalliance -1.0.jar@org/aopalliance/aop/AspectException.class” - 看起来它无法处理 Spring Boot 打包类的方式。也许这就是为什么我的报告是空的。
  • 有什么解决办法吗?

标签: java code-coverage jacoco jacoco-maven-plugin


【解决方案1】:

以下是实现此目的的步骤:

  1. 在单独的 JVM 中运行 java 应用程序并传递 -javaagent 参数。

  2. 针对应用程序运行测试(例如调用 Web 服务器上的端点等)

  3. 运行dumpreport 目标以生成报告。

你可以查看my article关于这个话题。

【讨论】:

    猜你喜欢
    • 2018-12-18
    • 2022-06-13
    • 1970-01-01
    • 2014-05-15
    • 2019-08-19
    • 1970-01-01
    • 2019-09-07
    • 2015-07-19
    • 2018-09-09
    相关资源
    最近更新 更多