我有一个Groovy类与单个静态方法Groovy代码:声纳+ JaCoco不计算为覆盖
class ResponseUtil {
static String FormatBigDecimalForUI (BigDecimal value){
(value == null || value <= 0) ? '' : roundHalfEven(value)
}
}
它有一个测试用例或几个:
@Test
void shouldFormatValidValue() {
assert '1.8' == ResponseUtil.FormatBigDecimalForUI(new BigDecimal(1.7992311))
assert '0.9' == ResponseUtil.FormatBigDecimalForUI(new BigDecimal(0.872342))
}
@Test
void shouldFormatMissingValue() {
assert '' == ResponseUtil.FormatBigDecimalForUI(null)
}
@Test
void shouldFormatInvalidValue() {
assert '' == ResponseUtil.FormatBigDecimalForUI(new BigDecimal(0))
assert '' == ResponseUtil.FormatBigDecimalForUI(new BigDecimal(0.0))
assert '' == ResponseUtil.FormatBigDecimalForUI(new BigDecimal(-1.0))
}
这导致6/12
分支根据声纳/ JaCoCo覆盖:
所以我已经将代码更改为...详细。我不认为原始代码是“太聪明”或类似的东西,但我更加明确和清晰。所以,在这里,它是:
static String FormatBigDecimalForUI (BigDecimal value) {
if (value == null) {
''
} else if (value <= 0) {
''
} else {
roundHalfEven(value)
}
}
而现在,而不必改变任何东西,声纳/ JaCoCo报告它被完全覆盖:
为什么会出现这种情况?
我猜这是Sonar/JaCoCo中的一个错误,因为这两种方法都会产生非常类似的字节码,据我所见...... –
我已经在Cobertura下运行相同的“代码覆盖看起来如何”并产生完全相同的结果。在单线上进行了半测试,并在扩展版本上进行了全面测试。那是......有关。 – Mike
我已经发布了两个生成的字节码[这里](https://gist.github.com/e61f5f41175c6a8e076b),他们看起来没什么问题(但显然多行代码调用'areturn'比单行版本更)......可能有人在Groovy用户邮件列表中发现了这个问题(并找到了解决方法)......我会尝试关闭一封电子邮件,看看有没有人看到过这个问题? –