我正在尝试提高代码的行覆盖率。执行一行,我正在调用一个方法,该方法又会引发异常。但线路覆盖率显示红色,表示该行未执行。
法典:
1 public void myMethod(SomeService someService){
2 throwException(someService);
3 }
4 public void throwException(SomeService someService){
5 THROW an exception here
6 }
在我的测试类中,我正在准备一些服务所需的数据并从上面的代码调用myMethod。 行 # 2 显示红色,即使该行被执行并按预期抛出异常。请建议如何显示覆盖的线路以增加线路覆盖范围。
请在发布问题之前使用搜索,因为这是EclEmma FAQ和JaCoCo常见问题解答中描述的广为人知的JaCoCo限制:
有例外的源代码行显示没有覆盖范围。为什么?
JaCoCo使用所谓的探针确定代码执行。探头在某些位置插入控制流中。执行后续探测后,代码被视为已执行。在异常的情况下,这样的指令序列在中间的某个地方中止,并且相应的源代码行没有标记为已覆盖。
换句话说:如果方法调用总是像您的示例中那样抛出异常,那么此方法调用的行将永远不会被标记为完全覆盖(又名绿色)。查看包含方法调用的行的唯一方法是在此方法调用不引发异常时执行/测试。
我无法从您的示例中分辨出来,但是我以前搞砸了测试,因为我对例外不够具体。 也许正在抛出一个例外,但不是你所期望的那个? 对我来说,在单元测试中,很容易抛出NullPointerException。 也许它被抛出,这导致您的测试通过,但代码覆盖率未显示为已覆盖?