声纳无法覆盖调用异常投掷功能的分支

时间:2015-01-25 02:12:52

标签: java junit4 sonarqube jacoco

我正在为我的项目编写代码覆盖率并遇到一种奇怪的行为。我有这样的功能

public void testException(int i) throws Exception {
    if (i == 0) {
        throw new Exception("exception");
    }
}

和测试用例

@Test
public void testException() {
    try {
        mapper.testException(0);
        fail("Wrong");
    } catch (Exception ex) {
        assertEquals("exception", ex.getMessage());
    }
}

通过maven(mvn sonar:sonar)运行测试用例后,分支将被Sonar覆盖。但是,如果测试的功能是这样的

public void testException(int i) throws Exception {
    if (i == 0) {
        throwException();
    }
}

public void throwException() throws Exception {
    throw new Exception("exception");
}

然后if分支没有被覆盖,尽管实际执行了throwException函数的内部。反正有没有克服这个问题?我需要覆盖100%的课程

1 个答案:

答案 0 :(得分:1)

看起来FAQ

中没有涵盖代码的原因
  

包含例外的代码显示无覆盖范围。为什么?

     

JaCoCo使用所谓的探测器确定代码执行。探头是   在某些位置插入控制流程。代码是   被认为是在执行后续探测时执行的。在   异常的情况下,这样的指令序列被中止   在中间的某个地方,并没有标记为已执行。

仍然我不明白为什么直接投掷的报道仍然出现在声纳