Pitest -测试覆盖率报告数据



我理解当从Pitest输出测试覆盖率报告时,您会看到以下结构:

<block classname='classname' method='methodName' number='1'>
<tests>
<test name='testName1(file1)'/>
<test name='testName2(file2)'/>
</tests>
</block>

然而,我不确定'number'属性的含义。它的意义是什么?由于

为方法内block的编号。

块是一起执行的代码块。为了计算覆盖率,pitest在每个块中创建一个探针。如果探测被执行,那么pitest就知道该块中的所有指令都已执行,除非抛出异常。

大多数覆盖系统将探针放置在块的末尾,因此在发生异常的情况下,覆盖将被低估。皮特把它们放在每个街区的开始。这会导致报告过多,但这对于pitest来说是可取的,因为覆盖率数据用于针对突变体的目标测试。运行一个不检测突变的测试比不运行一个会检测突变的测试要好。

块的精确定义在两个版本之间发生了变化。最初,它大致对应于代码中的分支。

int foo(boolean b) {
System.out.println("hello"); // block 1
int i = 2; // block 1
if (b) { // block 1
System.out.println("boo"); // block 2
i = i + 42; // block 2
}
System.out.println("bye"); // block 3
return i; // block 3
} 

所以上面的代码将有三个块,如注释所示。后来的版本使块更小,所以当发生异常时,测试可以更准确地定位。

最新更新