Java Sonar无法覆盖调用异常抛出函数的分支
我正在为我的项目编写代码覆盖率,并经历了一种奇怪的行为。我有一个这样的函数Java Sonar无法覆盖调用异常抛出函数的分支,java,junit4,sonarqube,jacoco,Java,Junit4,Sonarqube,Jacoco,我正在为我的项目编写代码覆盖率,并经历了一种奇怪的行为。我有一个这样的函数 public void testException(int i) throws Exception { if (i == 0) { throw new Exception("exception"); } } public void testException(int i) throws Exception { if (i == 0) { throwExceptio
public void testException(int i) throws Exception {
if (i == 0) {
throw new Exception("exception");
}
}
public void testException(int i) throws Exception {
if (i == 0) {
throwException();
}
}
public void throwException() throws Exception {
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) {
throw new Exception("exception");
}
}
public void testException(int i) throws Exception {
if (i == 0) {
throwException();
}
}
public void throwException() throws Exception {
throw new Exception("exception");
}
然后,
if
分支未被覆盖,尽管实际上执行了throweexception
函数的内部。有没有办法克服这个问题?我需要涵盖100%的课程看起来没有涵盖代码的原因在
有异常的代码不显示覆盖范围。为什么?
JaCoCo使用所谓的探测来确定代码的执行。探针是
在某些位置插入控制流。代码是
执行后续探测时视为已执行。在里面
在异常情况下,该指令序列被中止
在中间的某个地方,没有标记为执行。
我仍然不明白为什么直接投掷的覆盖范围仍然出现在sonar上您使用的是哪个版本的SonarQube?@CSchulz:我同时使用了4.2和4.5