EclEmma(Jacocco)显示即使执行了该行也未覆盖

时间:2019-01-04 02:23:13

标签: java unit-testing junit mockito jacoco

我正在尝试提高代码的行覆盖率。在我调用某个方法的地方执行了一行代码,该方法又会引发异常。但是行覆盖率显示为红色,表示未执行该行。

代码:

1 public void myMethod(SomeService someService){
2   throwException(someService);
3 }

4 public void throwException(SomeService someService){
5   THROW an exception here
6 }

在测试类中,我正在准备SomeService所需的数据,并从上述代码中调用myMethod。第2行显示红色,即使该行已执行并按预期抛出异常。请建议如何显示行覆盖范围以增加行覆盖范围。

2 个答案:

答案 0 :(得分:1)

Please use search,然后再发布问题,因为这是widelyknown中描述的EclEmma FAQ JaCoCo FAQ JaCoCo限制:

  

带有例外的源代码行未显示任何内容。为什么?

     

JaCoCo使用所谓的探测器确定代码执行。将探针插入控制流中的某些位置。当执行后续探测时,代码被视为已执行。如果出现例外情况,则会在中间的某个位置中止此类指令序列,并且相应的源代码行不会标记为已覆盖。

换句话说:如果方法调用总是像您的示例一样抛出异常,则此方法调用的行将永远不会被标记为完全覆盖的绿色。在此方法调用不会引发异常的情况下,唯一可以看到方法调用行的方法是进行执行/测试。

答案 1 :(得分:0)

我无法从您的示例中看出来,但是我之前弄乱了测试,因为我对异常的了解不够具体。也许正在抛出一个异常,但是您所期望的却不是?对我来说,在单元测试中,抛出NullPointerException很容易。也许正在抛出该异常,这导致您的测试通过,但是代码覆盖率未显示为被覆盖?