2011-11-22 19 views
68

मैं अपनी परियोजना में से एक के लिए कोबर्टुरा मेवेन प्लगइन का उपयोग करता हूं। लेकिन मेरे पास जेनरेट की गई रिपोर्ट के बारे में एक सवाल है:रेखा और शाखा कवरेज के बीच मतभेद

लाइन और शाखा कवरेज के बीच क्या अंतर है?

उत्तर

105

लाइन कवरेज मापता है कि कितने बयान आप लिया (एक बयान आमतौर पर टिप्पणी, सशर्त, आदि शामिल नहीं कोड की एक पंक्ति, है)। शाखा कवरेज जांचता है कि क्या आपने प्रत्येक सशर्त (यदि, जबकि, के लिए) के लिए सही और झूठी शाखा ली है। आपके पास सशर्त के रूप में दो बार शाखाएं होंगी।

आपको परवाह क्यों है? उदाहरण पर विचार करें:

public int getNameLength(boolean isCoolUser) { 
    User user = null; 
    if (isCoolUser) { 
     user = new John(); 
    } 
    return user.getName().length(); 
} 

आप true को isCoolUser सेट के साथ इस विधि कॉल करते हैं, आप 100% बयान कवरेज मिलता है। बढ़िया है? यदि आप false के साथ कॉल करते हैं, तो एनओपीई, एक शून्य सूचक होने वाला है। हालांकि, आपके पास पहले मामले में 50% शाखा कवरेज है, इसलिए आप देख सकते हैं कि आपके परीक्षण में कुछ याद आ रही है (और अक्सर, आपके कोड में)।

+4

महान जवाब! यह दिखाता है कि लाइन कवरेज अच्छा कोड रखने की झूठी भावना देता है! – MAGx2

45

एक सरल उदाहरण के रूप में इस कोड डालें:

if(cond) { 
    line1(); 
    line2(); 
    line3(); 
    line4(); 
} else { 
    line5(); 
} 

अपने परीक्षण केवल अभ्यास cond सच जा रहा है और कभी नहीं else शाखा चलाता है यदि आपके पास:

  • 5 लाइनों में से 4 कवर
  • 2 शाखाओं में से 1

इसके अलावा Cobertura report ही कुछ अच्छा पॉप अप मदद टूलटिप्स का परिचय जब स्तंभ शीर्ष लेख क्लिक किया जाता है:

लाइन कवरेज - इस परीक्षण रन द्वारा निष्पादित लाइनों के प्रतिशत।

शाखा कवरेज - इस परीक्षण रन द्वारा निष्पादित शाखाओं के प्रतिशत।

+1

यह भी एक उत्कृष्ट जवाब है! सरल और स्पष्ट! – Bowen

1
if(cond){ 
    //branch 1 
}else{ 
    //branch 2 
} 

लाइन लाइनेज और शाखा कवरेज दोनों के लिए 100% कवरेज प्राप्त करने के लिए आपको सभी पंक्तियों को शाखा 1 और शाखा 2 को संबोधित करने की आवश्यकता है।

यदि आप सभी को कुछ भी याद आती है, तो आपको शाखा कवरेज का आधा हिस्सा मिल जाएगा। यदि आप दोनों में # लाइनों में से कुछ भी याद कर चुके हैं, तो आपको 100% का ब्रांच कवरेज मिलेगा लेकिन लाइन कवरेज के साथ 100% नहीं होगा।

उम्मीद है कि इससे मदद मिलती है।

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