Mi chiedo se misurare la copertura del codice condizionale con gli attuali strumenti per Java non sia obsoleto da quando è uscito Java 8. Con Java 8's Optional
e Stream
possiamo spesso evitare code branch / loops, il che rende facile ottenere una copertura condizionale molto elevata senza testare tutti i possibili percorsi di esecuzione. Confrontiamo il vecchio codice Java con il codice Java 8:
Prima di Java 8:
public String getName(User user) {
if (user != null) {
if (user.getName() != null) {
return user.getName();
}
}
return "unknown";
}
Ci sono 3 possibili percorsi di esecuzione nel metodo sopra. Per ottenere il 100% di copertura condizionale, è necessario creare 3 test unitari.
Java 8:
public String getName(User user) {
return Optional.ofNullable(user)
.map(User::getName)
.orElse("unknown");
}
In questo caso, i rami sono nascosti e abbiamo solo bisogno di 1 test per ottenere una copertura del 100% e non importa in quale caso verificheremo. Sebbene ci siano ancora gli stessi 3 rami logici che dovrebbero essere coperti, credo. Penso che rende le statistiche di copertura condizionale completamente non attendibili in questi giorni.
Ha senso misurare la copertura condizionale per il codice Java 8? Ci sono altri strumenti che individuano il codice sottovalutato?