Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用JaCoCo代理检查代码覆盖率?_Java_Code Coverage_Jacoco - Fatal编程技术网

Java 如何使用JaCoCo代理检查代码覆盖率?

Java 如何使用JaCoCo代理检查代码覆盖率?,java,code-coverage,jacoco,Java,Code Coverage,Jacoco,我将使用JaCoCo代理将应用程序部署到生产环境中,让它工作一段时间。结果应该有助于我确定可以删除的代码部分 我围绕这个主题开始了一些研究,并准备了HelloWorld应用程序: public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world"); } } 然后我编译了类:“javac HelloWorld.java”并得到了H

我将使用JaCoCo代理将应用程序部署到生产环境中,让它工作一段时间。结果应该有助于我确定可以删除的代码部分

我围绕这个主题开始了一些研究,并准备了HelloWorld应用程序:

public class HelloWorld {

    public static void main(String[] args) {
        System.out.println("Hello world");
    }
}
然后我编译了类:“javac HelloWorld.java”并得到了HelloWorld.class文件

现在,我使用以下命令运行应用程序:“java-javaagent:jacocoagent.jar HelloWorld”程序执行并生成jacoco二进制文件。该文件包含一些二进制数据

一切看起来都很好,但是覆盖率报告显示覆盖率为0%,尽管它应该是100%


有没有人遇到过这个问题或纠正过我的错误做法?

我使用这些步骤生成了完整的报告。因为我使用maven进行这种操作,所以我在您的步骤之后添加了maven。我根据您的问题创建了HelloWorld.java。然后我遵循以下步骤:

javac HelloWorld.java
输出
HelloWorld.class
然后我通过执行java-javaagent:jacocoagent.jar HelloWorld

然后我创建了一个pom.xml文件,其内容如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>test</groupId>
    <artifactId>test</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <name>test</name>


    <build>
        <plugins>
            <plugin>
                <groupId>org.jacoco</groupId>
                <artifactId>jacoco-maven-plugin</artifactId>
                <version>0.7.5.201505241946</version>
            </plugin>
        </plugins>
    </build>

4.0.0
测试
测试
0.0.1-快照
聚甲醛
测试
org.jacoco
jacocomaven插件
0.7.5.201505241946

之后,我创建了一个
target/classes
目录。我复制了
jacoco.exec
target/
HelloWorld.class
target/class

然后,我执行了
mvnjacoco:report
,它将生成一个报告给
target/site/jacoco
。其中包含正确的覆盖范围信息

我知道对于一个简单的应用程序来说,使用maven听起来可能不太好。但是我不知道从jacoco.exec生成报告的其他方法。顺便说一下,maven插件版本和jacocoagent版本必须匹配


这是我得到的结果。

你们有什么测试吗?如果您没有任何测试代码覆盖率将为0%,我没有任何测试,我的目标是在遗留项目中识别死代码,并提出使用JaCoCo的想法。我正在用代理执行我的应用程序,所以类被加载,方法被执行,它不应该在覆盖率报告中可见吗?谢谢你们的解决方案。据我所知,您使用maven和jacoco插件只是为了解释二进制文件jacoco.exec并查看html报告。我对IntelliJ和Jenkins插件(无mvn)也做了同样的操作,得到了0%的报告。和你做了同样的操作,效果很好。所以看起来IntelliJ IDEA JaCoCo插件和Jenkins插件在这种情况下无法生成正确的报告,因为它们生成的报告覆盖率为0%。