J'ai une classe Groovy avec une seule méthode statique :
class ResponseUtil {
static String FormatBigDecimalForUI (BigDecimal value){
(value == null || value <= 0) ? '' : roundHalfEven(value)
}
}
Il a un ou plusieurs cas de test :
@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))
}
Il en résulte 6/12
branches couvertes selon le Sonar/JaCoCo :
J'ai donc modifié le code pour qu'il soit plus... verbeux. Je ne pense pas que le code original soit "trop intelligent" ou quelque chose comme ça, mais je l'ai rendu plus explicite et plus clair. Donc, le voici :
static String FormatBigDecimalForUI (BigDecimal value) {
if (value == null) {
''
} else if (value <= 0) {
''
} else {
roundHalfEven(value)
}
}
Et maintenant, sans avoir changé quoi que ce soit d'autre, Sonar/JaCoCo déclare qu'il est entièrement couvert :
Pourquoi en est-il ainsi ?