我正在为我的项目编写代码覆盖率并遇到一种奇怪的行为。我有这样的功能
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%的课程
答案 0 :(得分:1)
看起来FAQ
中没有涵盖代码的原因包含例外的代码显示无覆盖范围。为什么?
JaCoCo使用所谓的探测器确定代码执行。探头是 在某些位置插入控制流程。代码是 被认为是在执行后续探测时执行的。在 异常的情况下,这样的指令序列被中止 在中间的某个地方,并没有标记为已执行。
仍然我不明白为什么直接投掷的报道仍然出现在声纳