我正在尝试提高代码的行覆盖率。在我调用某个方法的地方执行了一行代码,该方法又会引发异常。但是行覆盖率显示为红色,表示未执行该行。
代码:
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行显示红色,即使该行已执行并按预期抛出异常。请建议如何显示行覆盖范围以增加行覆盖范围。
答案 0 :(得分:1)
Please use search,然后再发布问题,因为这是widely和known中描述的EclEmma FAQ JaCoCo FAQ JaCoCo限制:
带有例外的源代码行未显示任何内容。为什么?
JaCoCo使用所谓的探测器确定代码执行。将探针插入控制流中的某些位置。当执行后续探测时,代码被视为已执行。如果出现例外情况,则会在中间的某个位置中止此类指令序列,并且相应的源代码行不会标记为已覆盖。
换句话说:如果方法调用总是像您的示例一样抛出异常,则此方法调用的行将永远不会被标记为完全覆盖的绿色。在此方法调用不会引发异常的情况下,唯一可以看到方法调用行的方法是进行执行/测试。
答案 1 :(得分:0)
我无法从您的示例中看出来,但是我之前弄乱了测试,因为我对异常的了解不够具体。也许正在抛出一个异常,但是您所期望的却不是?对我来说,在单元测试中,抛出NullPointerException很容易。也许正在抛出该异常,这导致您的测试通过,但是代码覆盖率未显示为被覆盖?