Pracuję nad uzyskaniem 100% pokrycia kodu dla biblioteki, nad którą pracuję i wydaje mi się, że mam pewne problemy z instrukcją przełączania i zasięgiem, którego po prostu nie rozumiem.Pokrycie Jacoco dla oświadczenia przełącznika
Obecnie używam Jacoco 0.7.2, ponieważ każda nowsza wersja wydaje się zrywać z Robolectrics.
przetestować prosty 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;
}
}
Test pisałem zawiera następujące kontrole (muszę użyć refleksji jako metoda jest prywatny):
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));
Wynik nie jest co oczekiwać I:
Obraz jest nieco mylący, ponieważ żółta linia sugeruje, że czegoś brakuje. Zielona ikona informuje mnie, że obejmuje 3 z 3 gałęzi.
Testowałem również, aby rozszerzyć obudowę przełącznika o case NONE
i przewrócić, ale nic to nie zmieniło.
Jedyne, co mogę zrobić, to wymienić przełącznik na "/ else", a następnie otrzymam 100% pokrycia.
Obecnie mam pokrycie 98%, ale ja nic nie brakowało w oparciu o przegląd:
Nie testujesz sprawy, kiedy przechodzisz 'null', po pierwsze ... –
Brakuje jednego przypadku testowego, który przekazuje wartość pustą dla' type', co powinno skutkować ' NullPointerException'. (Szczerze mówiąc, przestaję rozciągać przed uderzeniem w wejście, a jonskeet wpada w ten sam punkt ...) –
Hm ... prawda, ale dlaczego nie jest gdzieś wymieniona jako gałąź? Przegląd pokazuje, że nie brakuje mi żadnej złożoności, co zwykle ma miejsce, gdy brakuje mi ścieżki zerowej ... w każdym razie przetestuję ją i wrócę z wynikami – WarrenFaith