JaCoCo的指令范围:指令数不正确

时间:2015-07-15 19:36:42

标签: java jacoco

这是一种简单的测试方法:

public static boolean isPowerOfTwo(final int i) {
    return (i > 0) && (i & (i - 1)) == 0;
}

要获取字节代码,我在.class文件上运行javap -c

public static boolean isPowerOfTwo(int);
  Code:
     0: iload_0
     1: ifle          14
     4: iload_0
     5: iload_0
     6: iconst_1
     7: isub
     8: iand
     9: ifne          14
    12: iconst_1
    13: ireturn
    14: iconst_0
    15: ireturn

如您所见, 16 字节代码指令。

现在我运行一个简单的单元测试

@Test
public void testPowerOfTwoInt() {
    assertFalse(Util.isPowerOfTwo(Integer.MAX_VALUE));
    assertFalse(Util.isPowerOfTwo(0));
    assertTrue(Util.isPowerOfTwo(64));
    assertTrue(Util.isPowerOfTwo(128));
    assertFalse(Util.isPowerOfTwo(-128));
}

但JaCoCo告诉我,isPowerOfTwo仅包含 12 字节代码说明:Instruction Coverage

只有12个而不是16字节的代码指令是什么原因?类文件由Eclipse编译器生成。 JaCoCo是否运行另一个类文件?

1 个答案:

答案 0 :(得分:4)

再次查看您的输出 - javap报告的指令只有12条:

public static boolean isPowerOfTwo(int);
  Code:
     0: iload_0
     1: ifle          14
//There's no 2 or 3 here...
     4: iload_0
     5: iload_0
     6: iconst_1
     7: isub
     8: iand
     9: ifne          14
//and no 10 or 11 here.
    12: iconst_1
    13: ireturn
    14: iconst_0
    15: ireturn