Sto lavorando per ottenere una copertura del codice al 100% per una libreria su cui sto lavorando e mi sembra di avere alcuni problemi con un'istruzione switch e la copertura che semplicemente non capisco.Copertura jacoco per la dichiarazione dell'interruttore
Attualmente sto usando Jacoco 0.7.2 perché ogni versione più recente sembra rompersi con Robolectrics.
provo una semplice istruzione switch:
public enum Type {
NONE, LEGACY, AKS
}
private static Class<?> getCipherClass(Type type) {
switch (type) {
case LEGACY:
return CipherWrapperLegacy.class;
case AKS:
return CipherWrapperAks.class;
default:
return null;
}
}
Il test che ho scritto contiene i seguenti controlli (devo usare riflessione come il metodo è privato):
final CipherWrapper instance = CipherWrapper.createInstance(mockContext, CipherWrapper.Type.LEGACY, ALIAS);
assertNotNull(instance);
Method getCipherMethod = TestUtils.makeMethodAccessible(CipherWrapper.class, "getCipherClass", CipherWrapper.Type.class);
assertNull(getCipherMethod.invoke(instance, CipherWrapper.Type.NONE));
assertEquals(CipherWrapperAks.class, getCipherMethod.invoke(instance, CipherWrapper.Type.AKS));
assertEquals(CipherWrapperLegacy.class, getCipherMethod.invoke(instance, CipherWrapper.Type.LEGACY));
Il risultato non è quello che mi aspettavo:
L'immagine è un po 'confusa poiché la linea gialla indica che manca qualcosa. L'icona verde mi dice che 3 di 3 rami sono coperti.
Ho anche provato a estendere la scatola degli interruttori con case NONE
e una caduta, ma non ha cambiato nulla.
L'unica cosa che posso fare è sostituire l'interruttore con if/else e quindi ottengo una copertura del 100%.
Attualmente ho una copertura del 98%, ma ho nulla è perso basa sulla panoramica:
Non si verifica il caso quando si passa in 'null', per una cosa ... –
C'è un caso di test mancante, che sta passando in un valore nullo per' tipo', che dovrebbe risultare in un ' NullPointerException'. (Onestamente, mi fermo per allungare prima di entrare, e jonskeet piomba in avanti con lo stesso punto ...) –
Hm ... vero, ma perché non è menzionato come un ramo da qualche parte? La panoramica mostra che non mi manca nessuna complessità, che è normalmente il caso se mi manca un percorso nullo ... comunque lo testò e tornerò con i risultati – WarrenFaith