2016-02-09 22 views
5

के लिए जैको कवरेज मैं पुस्तकालय के लिए 100% कोड कवरेज प्राप्त करने के लिए काम कर रहा हूं, जिस पर मैं काम कर रहा हूं और मुझे लगता है कि स्विच स्टेटमेंट और कवरेज के साथ कुछ समस्याएं हैं जिन्हें मैं समझ नहीं पा रहा हूं।स्विच स्टेटमेंट

मैं वर्तमान में जैकोको 0.7.2 का उपयोग कर रहा हूं क्योंकि हर नया संस्करण Robolectrics के साथ तोड़ने लगता है।

मैं एक साधारण स्विच बयान का परीक्षण:

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

परीक्षण मैंने लिखा निम्नलिखित जांच में शामिल है (मैं के रूप में विधि निजी है प्रतिबिंब का उपयोग करना):

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

परिणाम नहीं है मेरी अपेक्षा है

Jacoco code coverage result

छवि थोड़ा उलझन में है क्योंकि पीले रंग की रेखा से पता चलता है कि कुछ गायब है। हरा आइकन मुझे बताता है कि 3 में से 3 शाखाएं शामिल हैं।

मैंने case NONE के साथ स्विच केस का विस्तार करने के लिए भी परीक्षण किया और इसके माध्यम से गिरावट आई लेकिन यह कुछ भी नहीं बदला।

एकमात्र चीज जो मैं कर सकता हूं स्विच के साथ/अन्य के साथ प्रतिस्थापित करना है और फिर मुझे 100% कवरेज मिलता है।

वर्तमान में मैं 98% कवरेज है, लेकिन मैं कुछ भी नहीं सिंहावलोकन के आधार पर चूक जाता है: Jacoco overall coverage

+5

जब आप 'शून्य' में जाते हैं तो आप मामले की जांच नहीं कर रहे हैं, एक चीज के लिए ... –

+3

एक टेस्ट केस गायब है, जो 'टाइप' के लिए शून्य मान में गुज़र रहा है, जिसके परिणामस्वरूप' NullPointerException'। (ईमानदारी से, मैं प्रवेश करने से पहले खिंचाव करना बंद कर देता हूं, और जॉन्सकेट एक ही बिंदु के साथ छेड़छाड़ करता है ...) –

+0

एचएम ... सच है, लेकिन इसे कहीं शाखा के रूप में क्यों नहीं बताया गया है? अवलोकन से पता चलता है कि मुझे कोई जटिलता याद नहीं आती है, जो सामान्य रूप से मामला है यदि मुझे शून्य पथ याद आती है ... वैसे भी इसका परीक्षण होगा और परिणाम – WarrenFaith

उत्तर

1

आह्वान विधि आप एक गुमनाम चर में डाल पसंद नहीं करता है, तो:

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

फिर कोशिश यह एक नामित चर के साथ:

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

इसके अलावा, आप अगर मंगलाचरण अपवाद सिर्फ invo की वजह से एक अपवाद लपेटकर है की जाँच करनी चाहिए आमंत्रण के साथ एक त्रुटि के बजाय राजा विधि।

+0

दरअसल, ऐसा लगता है कि 'invoke()' एक नया अपवाद बनाता है और मूल रूप से, मेरे मामले में, NullPointerException "कारण" के रूप में मूल है। मेरा कैच ब्लॉक इस तरह दिखता है: 'पकड़ो (InvocationTargetException e) {if (e.getCause() उदाहरण NullPointerException के उदाहरण) {....}} ' – WarrenFaith

संबंधित मुद्दे