2016-02-09 23 views
5

Çalıştığım bir kitaplık için% 100 kod kapsamı almak için çalışıyorum ve bir anahtara ve yalnızca anlamadığım bir kapsamla ilgili bazı sorunlar yaşıyorum.Anahtar deyimi için Jacoco kapsamı

Şu anda Jacoco 0.7.2 kullanıyorum, çünkü her yeni sürüm Robolectrics ile kopuyor gibi görünüyor.

ben basit switch deyimi sınamak:

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; 
    } 
} 

Yazdığım testi aşağıdaki kontrolleri içerir (ı yöntem özel olarak yansıması kullanmak zorunda):

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)); 

sonucu değil beklediğim ne:

Jacoco code coverage result

Sarı çizginin eksik bir şey olduğunu öne sürdüğü için görüntü biraz kafa karıştırıcı. Yeşil simge bana 3 daldan 3'ünün kaplandığını söylüyor.

Ayrıca anahtar kutusunu case NONE ile uzatmak için bir test yaptım ve bir şey değiştirmedi.

Yapabileceğim tek şey, eğer/else ile anahtarı değiştirmek ve sonra% 100 kapsama almak.

Şu anda% 98 kapsama sahip ama hiçbir şey genel dayalı cevapsız edilir: Jacoco overall coverage

+5

Tek bir şey için 'null' ilettiğinizde durumu sınamayacaksınız ... –

+3

Bir tür için sonuçlanması gereken 'type' için boş bir değerde geçen bir sınama vakası yok. NullPointerException'. (Dürüst olmak gerekirse, girişe girmeden önce germek için duruyorum ve jonskeet aynı noktaya atlıyor ...) –

+0

Hm ... doğru, ama neden bir yerde bir dal olarak bahsedilmiyor? Genel bakış, herhangi bir karmaşıklığı özlemediğimi gösteriyor, normalde bu durumda null bir yolu özlüyorsam ... her halükarda bunu test edip sonuçlarıyla geri dönün – WarrenFaith

cevap

1

çağırmak yöntemi anonim değişkende koyarak sevmiyorsa:

getCipherMethod.invoke(instance, (CipherWrapper.Type) null); 

Sonra denemek adlandırılmış değişkenle o: çağırma istisna sadece iNVO kaynaklanan bir istisna tamamlıyor Ayrıca

CipherWrapper.Type nullType = null; 
getCipherMethod.invoke(instance, nullType); 

, sen kontrol etmelisiniz Yöntemin kendisi yerine bir hatadan ziyade kral.

+0

Gerçekten de, “invoke()' yeni bir istisna yaratıyor ve orijinali, benim durumumda NullPointerException, "neden" olarak bekleniyor. Benim catch bloğum şöyle görünür: 'catch (InvocationTargetException e) {if (e.getCause() NullPointerException instanceof) {....}}' – WarrenFaith

İlgili konular