【问题标题】:JaCoCo Offline Instrumentaion and Integration Test Coverage ReportsJaCoCo 离线检测和集成测试覆盖率报告
【发布时间】:2016-11-08 21:10:20
【问题描述】:

我一直在尝试在 JBoss 服务器中实现 JaCoCo 离线代码覆盖,使用检测 EAR 进行部署和 jacococagent.jar,以便跟踪针对所述 JBoss 运行的外部集成测试的代码覆盖。

我一直在遵循以下指南:

http://www.eclemma.org/jacoco/trunk/doc/offline.html

http://automationrhapsody.com/code-coverage-with-jacoco-offline-instrumentation-with-maven/

我觉得我已经很接近了,因为一切似乎都在工作,但是,当我在 eclipse 的 EclEmma 插件中加载覆盖率报告时,它报告为所有内容的 0 覆盖率(我知道这是错误的)。

这是我的设置:

这里是maven插件配置:

                <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>${jacoco.version}</version>
                <configuration>
                    <!-- <destFile>${sonar.jacoco.reportPath}</destFile> -->
                    <append>true</append>

                    <excludes>
                        <exclude>**/dao/**/*Dao*</exclude>
                        <exclude>**/dao/**/*DAO*</exclude>
                        <exclude>**/dao/**/*Vo*</exclude>
                        <exclude>**/dao/**/*VO*</exclude>
                        <exclude>**/ui/**/*</exclude>
                        <exclude>**/*Vo.*</exclude>
                        <exclude>**/*VO.*</exclude>
                        <exclude>**/test/**/*</exclude>
                        <exclude>**/tester/**/*</exclude>
                    </excludes>

                </configuration>
                <executions>
                    <execution>
                        <id>pre-unit-test</id>
                        <goals>
                            <goal>prepare-agent</goal>
                        </goals>
                        <configuration>
                            <destFile>${sonar.jacoco.reportPath}</destFile>
                        </configuration>
                    </execution>
                    <execution>
                        <id>unit-test-report</id>
                        <phase>test</phase>
                        <goals>
                            <goal>report</goal>
                        </goals>
                        <configuration>
                            <dataFile>${sonar.jacoco.reportPath}</dataFile>
                        </configuration>
                    </execution>
                    <execution>
                        <id>jacoco-instrument</id>
                        <phase>test</phase>
                        <goals>
                            <goal>instrument</goal>
                        </goals>
                        <configuration>
                            <skip>${jacoco.skip.instrument}</skip>
                            <!-- <skip>false</skip> -->
                        </configuration>
                    </execution>
                </executions>
            </plugin>

这是我的 jacoco-agent.properties 文件:

destfile=/stage/live_integration_jacoco.exec
output=file
dumponexit=true
append=true

我将 JaCoCo 代理 JAR 捆绑在 EAR 中作为这些依赖项(第二个就是 jacocoagent.jar 在我们的存储库中标记的内容):

        <dependency>
            <groupId>org.jacoco</groupId>
            <artifactId>org.jacoco.agent</artifactId>
            <version>${jacoco.version}</version>
        </dependency>

        <dependency>
            <groupId>org.jacoco.build</groupId>
            <artifactId>org.jacoco.jacocoagent</artifactId>
            <version>${jacoco.version}</version>
        </dependency>

这是我的过程:

我在项目上运行这个:mvn clean install -U -Djacoco.skip.instrument=false

这会生成我的仪表化 EAR 工件。我已经通过反编译其中的一些来验证其中的类确实是由 JaCoCo 检测的。

我使用已检测代码的 EAR、其中包含的 jacococagent.jar 以及包含的 jacoco-agent.popreties 文件,并将其部署到 JBoss。 JBoss 启动得很好(在我开始直接将 jacocoagent.jar 捆绑在其中之前,它曾经得到 ClassNotFound 异常)。

此时将创建“/stage/live_integration_jacoco.exec”文件,大小为“0”。

我在服务器上运行一些测试,甚至是一些手动测试,然后停止应用程序。

“/stage/live_integration_jacoco.exec”文件现在有数据(在我的观察中到目前为止有 30-60kb 的数据)。

我将该 exec 文件导入到 eclipse 中,它加载时没有任何错误并显示项目中的类,但是它报告所有内容的覆盖率为 0。

嗯,我不确定现在还可以尝试什么。

是否有人对如何在我的情况下正确生成覆盖率报告有一些想法?

谢谢!

【问题讨论】:

    标签: java maven jboss integration-testing jacoco


    【解决方案1】:

    我怀疑部署在服务器上的类是用 Oracle Java 编译器编译的,而 Eclipse 中的类是用 Eclipse Java 编译器编译的,因此 JaCoCo 无法关联它们,因为它们不同。要确认这一点 - 您可以尝试使用您尝试导入的 exec 文件生成报告,但在 Eclipse 之外使用 Ant 或 Maven。并确保您对原始(非检测)类执行报告生成,否则它们也将不匹配。

    【讨论】:

    • 感谢您的回复。我已经验证在导入 exec 文件时这些类是非仪器化的。我尝试使用我的 exec 文件用 maven 生成报告,但我一定做错了,因为我无法让它正常工作。你有通过 Maven 完成的例子吗?也许我正在查找错误的命令...
    • 在要生成报告的模块中执行mvn jacoco:report -Djacoco.dataFile=/stage/live_integration_jacoco.exec
    • 好的,我一直在使用 mvn jacoco:report,但我无法让它为我工作。例如,我运行mvn jacoco:report -Djacoco.dataFile="C:\development\live_integration_jacoco.exec" -DoutputDirectory="C:\development\JaCoCo-Output",但对于每个模块,输出都显示[INFO] --- jacoco-maven-plugin:0.7.7.201606060606:report (default-cli) @ module-name --- [INFO] Skipping JaCoCo execution due to missing execution data file.
    • 抱歉,最近添加了用户参数“jacoco.dataFile”,但尚未发布 (eclemma.org/jacoco/trunk/doc/changes.html),但要使其在早期版本中可用,您可以执行 org。 jacocojacoco-maven-plugin${jacoco.dataFile}
    • 感谢您的提示,我终于开始在 POM 中添加该值,它确实生成了 HTML 报告,但它仍然将所有内容显示为 0% 覆盖率...嗯...返回到绘图板,我猜......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    • 2016-01-16
    相关资源
    最近更新 更多