内置JAR的代码覆盖率

时间:2017-02-24 12:22:51

标签: java code-coverage jacoco

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

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

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

2 个答案:

答案 0 :(得分:4)

  

是否有能力生成代码覆盖率报告以添加到classpath jar?

应该有。您没有告诉您使用的是哪种代码覆盖工具。从问题中的标签看,您正在使用JaCoCo

代码覆盖通常分为三个阶段:

  1. Instrumentation :您针对已编译的类运行代码覆盖率工具,该工具会创建类的检测版本。从概念上讲,检测类在每行增加一个计数器时注入代码。这就是跟踪访问哪条线的方式。
  2. 已检测类的代码执行:代码运行,计数器收集已访问的行。
  3. 报告:读取计数器收集的数据并用于生成代码覆盖率报告。在这个阶段,您需要源代码,因此代码覆盖率工具可以将代码覆盖率结果与实际来源匹配。
  4. 在您的场景中,您可以做的是解压缩您想要拥有代码覆盖率的JAR,检测其中的类并将这些类压缩到另一个JAR。用带有检测类的JAR替换原始JAR。

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

答案 1 :(得分:1)

我认为你可以为自己定制一个这样的解决方案:

  1. 您进行“覆盖数据收集”
  2. export结果;例如,转换为CSV数据
  3. 您编写的一小段代码可以获取任何JAR存档的所有类/包的名称
  4. 然后,您只需从使用步骤3生成的CSV文件中提取这些行。
  5. 鉴于您的评论:您似乎无法理解“覆盖”对您的影响。关键是:你启动一个JVM; JVM 运行一些代码。在这样做的同时,收集有关使用哪些类/方法,采用路径等的数据。

    换句话说:

    • 驱动 JVM来运行东西
    • 覆盖框架会记录 代码路径

    该过程中没有任何内容与特定 JAR相关。覆盖范围只检查正在运行的代码。映射到“代码来自的地方是不同的方面。