लाइन और शाखा कवरेज के बीच अंतर


94

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

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

जवाबों:


168

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

तुम क्यो फिकर करते हो? उदाहरण पर विचार करें:

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

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


8
बहुत बढ़िया जवाब! यह दिखाता है कि जब लाइन कवरेज अच्छा कोड होने का झूठा एहसास देता है!
मैग्नेक्स 2

लाइन कवरेज या शाखा कवरेज के कारण आपको कौन से संभावित कीड़े मिल सकते हैं?
एम्ना अयादी

61

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

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

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

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

जब कॉलम हैडर पर क्लिक किया जाता है, तब भी कोबर्टुरा रिपोर्ट स्वयं कुछ अच्छे पॉप-अप हेल्प टूलटिप्स पेश करती है:

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

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


मैं इस उत्तर को लिखने की उम्मीद कर रहा था, लेकिन आपने मुझे (कई वर्षों से) पूर्वनिर्धारित कर दिया। जवाब साफ़ करें। धन्यवाद।
साउंडराजन ने

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

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

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

उम्मीद है की यह मदद करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.