Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.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 构建JAR的代码覆盖率_Java_Code Coverage_Jacoco - Fatal编程技术网

Java 构建JAR的代码覆盖率

Java 构建JAR的代码覆盖率,java,code-coverage,jacoco,Java,Code Coverage,Jacoco,是否能够为属于我的类路径的JAR文件生成代码覆盖率报告 jar已经编译并作为库添加到Gradle项目中 jar的测试代码存储在项目中。我认为您可以定制如下解决方案: 你做你的“覆盖率数据收集” 你知道结果;例如,转换为CSV数据 您只需编写一小段代码,就可以获取任何JAR归档的所有类/包的名称 然后,您只需从使用步骤3生成的CSV文件中提取这些行 鉴于你的评论:看来你不明白“覆盖范围”为你做了什么。关键是:启动一个JVM;JVM运行一些代码。在这样做的同时,收集关于使用哪些类/方法、采用的路径等

是否能够为属于我的类路径的JAR文件生成代码覆盖率报告

jar
已经编译并作为库添加到Gradle项目中


jar
的测试代码存储在项目中。

我认为您可以定制如下解决方案:

  • 你做你的“覆盖率数据收集”
  • 你知道结果;例如,转换为CSV数据
  • 您只需编写一小段代码,就可以获取任何JAR归档的所有类/包的名称
  • 然后,您只需从使用步骤3生成的CSV文件中提取这些行
  • 鉴于你的评论:看来你不明白“覆盖范围”为你做了什么。关键是:启动一个JVM;JVM运行一些代码。在这样做的同时,收集关于使用哪些类/方法、采用的路径等的数据

    换言之:

    • 你驱动JVM运行东西
    • 覆盖范围框架记录了所采用的代码路径
    该过程中没有任何内容与特定的JAR相关。覆盖率只是检查正在运行的代码。映射到“代码来自何处”是另一个方面

    是否能够为添加到classpath jar的文件生成代码覆盖率报告

    应该有。但是你没有告诉我你正在使用哪种代码覆盖工具。从问题中的标记可以看出你正在使用

    代码覆盖率通常经历3个阶段:

  • 插装:对已编译的类运行代码覆盖率工具,这将创建类的插装版本。从概念上讲,插装的类在每一行注入代码,增加一个计数器。这就是跟踪已访问的行的方式
  • 插入指令的类的代码执行:运行代码,计数器收集已访问的行
  • 报告:读取计数器收集的数据并用于生成代码覆盖率报告。在此阶段,您需要源代码,以便代码覆盖率工具可以将代码覆盖率结果与实际源匹配
  • 在您的场景中,您可以做的是解压您想要代码覆盖的JAR,插入其中的类,并将这些类压缩到另一个JAR。用插入类的JAR替换原始JAR


    这是一个非标准工作流,可能无法在Ant/Maven中轻松配置,但您可以通过编程方式进行配置,请参见和

    抱歉,可能问题还不够清楚。我可以为已编译的jar创建覆盖率报告吗?@Andriabramov yes youcan@GhostCat,谢谢,绝对是赞成票。但toongeorges的回答更详细,更具说服力完全适用于我的情况。不客气;事实上,我同意,他的答案更好;-)在JaCoCo的情况下,您不需要解包和工具类文件-JaCoCo代理()运行中的instruments类。Cobertura版本2.1.1和2.1.0不适用于java 1.8版本。执行Cobertura-instrument.bat文件时会出现错误@RaviJoshi谢谢,我删除了对Cobertura的引用。Cobertura的开发似乎没有JaCoCo那么积极,而且确实在java 8()方面存在问题。