JaCoCo 规则元素的含义以及如何组合它们

Dim*_*fis 7 jacoco jacoco-maven-plugin

我试图理解 JaCoCo 规则,但周围没有很多很好的例子。我看到的每个线程都循环使用文档中的相同示例。

我看到 3 个不同的指标:

  • 元素类型(BUNDLE、PACKAGE、CLASS、SOURCEFILE 或 METHOD)
  • 限制(指令、行、分支、复杂性、方法、类别)
  • 值(TOTALCOUNT、COVEREDCOUNT、MISSEDCOUNT、COVEREDRATIO、MISSEDRATIO)

我理解“元素类型”代表每个规则的范围,这很公平。

  • BUNDLE:代表整个项目
  • PACKAGE:每个java包
  • CLASS:顾名思义,一个类
  • 源文件:这与 有何不同CLASS?这与内部类有关吗?
  • 方法:范围适用于每种方法

但现在,限制和价值如何进入范围?例如:

<limit>
    <counter>LINE</counter>
    <value>COVEREDRATIO</value>
    <minimum>80%</minimum>
</limit>
Run Code Online (Sandbox Code Playgroud)

我可以替换LINEINSTRUCTION例如吗?如果,这意味着什么?

还来自文档:

如果限制是指比率,则它必须在 0.0 到 1.0 的范围内,其中小数位数也将决定错误消息的精度。

RATIOvsCOUNT很清楚,但我可以互换使用它们吗?IE:

<limit>
    <counter>LINE</counter>
    <value>TOTALCOUNT</value>
    <minimum>3</minimum>
</limit>
Run Code Online (Sandbox Code Playgroud)

如果,上述规则意味着什么?从生成的报告中,INSTRUCTION并且BRANCH始终处于比率 哈科科报告

div*_*gon 4

所以,这个问题的一部分关于BUNDLE, SOURCEFILE,刚刚在 JaCoCo 小组中CLASS得到了回答。

本质上,

  • BUNDLE - Maven 模块中组合在一起的所有类将根据规则进行检查
  • SOURCEFILE - 将根据规则检查每个 Java 文件
  • CLASS - 每个类文件将根据规则进行检查

混乱始于SOURCEFILECLASS,但您需要了解一个 Java 文件可以有多个类。例如,这里Shape.java有 2 个类 -ShapeTriangle

public abstract class Shape {
}

class Triangle extends Shape {
}
Run Code Online (Sandbox Code Playgroud)

SOURCEFILE将检查 的规则Shape.java,同时检查和 的CLASS规则。ShapeTriangle

例如,这是一个规则配置

<rule>
    <element>SOURCEFILE</element><!-- Here I change it for SOURCEFILE and CLASS values -->
    <limits>
        <limit>
            <counter>INSTRUCTION</counter>
            <value>TOTALCOUNT</value>
            <maximum>1</maximum>
        </limit>
    </limits>
</rule>
Run Code Online (Sandbox Code Playgroud)

以下是配置的输出SOURCEFILE

[WARNING] Rule violated for source file io/codejournal/maven/jacocodemo/Shape.java: instructions total count is 6, but expected maximum is 1
Run Code Online (Sandbox Code Playgroud)

当您使用配置运行相同的东西时CLASS,输出是针对每个类的。

[WARNING] Rule violated for class io.codejournal.maven.jacocodemo.Triangle: instructions total count is 3, but expected maximum is 1
[WARNING] Rule violated for class io.codejournal.maven.jacocodemo.Shape: instructions total count is 3, but expected maximum is 1
Run Code Online (Sandbox Code Playgroud)