ความแตกต่างระหว่างความครอบคลุมของไลน์และสาขา


94

ฉันใช้ปลั๊กอิน Cobertura Maven สำหรับหนึ่งในโครงการของฉัน แต่ฉันมีคำถามเกี่ยวกับรายงานที่สร้างขึ้น:

ความแตกต่างระหว่าง Line และ Branch coverage คืออะไร?

คำตอบ:


171

ความครอบคลุมของบรรทัดจะวัดจำนวนข้อความที่คุณใช้ (คำสั่งมักเป็นบรรทัดของรหัสไม่รวมความคิดเห็นเงื่อนไข ฯลฯ ) ความคุ้มครองสาขาจะตรวจสอบว่าคุณเอาสาขาจริงและเท็จสำหรับแต่ละเงื่อนไข (if, while, for) คุณจะมีสาขามากเป็นสองเท่าตามเงื่อนไข

จะแคร์ทำไม ลองพิจารณาตัวอย่าง:

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

หากคุณเรียกวิธีนี้โดยisCoolUserตั้งค่าเป็นtrueคุณจะได้รับความคุ้มครองใบแจ้งยอด 100% ฟังดูเข้าท่า? NOPE falseมีจะเป็นตัวชี้โมฆะถ้าคุณโทรด้วย อย่างไรก็ตามคุณมีความครอบคลุมสาขา 50% ในกรณีแรกดังนั้นคุณจะเห็นว่ามีบางอย่างขาดหายไปในการทดสอบของคุณ (และบ่อยครั้งในรหัสของคุณ)


8
ตอบโจทย์มาก! แสดงให้เห็นเมื่อการครอบคลุมบรรทัดให้ความรู้สึกผิดกับการมีรหัสที่ดี
แม็ก x2

อะไรคือจุดบกพร่องที่เป็นไปได้ที่คุณจะได้รับเนื่องจากการครอบคลุมสายงานหรือการครอบคลุมสาขา?
Emna Ayadi

61

ใช้รหัสนี้เป็นตัวอย่างง่ายๆ:

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

หากการทดสอบของคุณใช้เฉพาะความcondเป็นจริงและไม่เคยดำเนินการตามelseสาขาที่คุณมี:

  • ครอบคลุม 4 ใน 5 บรรทัด
  • ครอบคลุม 1 ใน 2 สาขา

นอกจากนี้รายงาน Cobertura ยังแนะนำคำแนะนำเครื่องมือช่วยเหลือป๊อปอัปที่ดีเมื่อคลิกที่ส่วนหัวของคอลัมน์:

Line Coverage - เปอร์เซ็นต์ของบรรทัดที่ดำเนินการโดยการทดสอบนี้

ความครอบคลุมสาขา - เปอร์เซ็นต์ของสาขาที่ดำเนินการโดยการทดสอบนี้


ฉันหวังว่าจะได้เขียนคำตอบนี้ แต่คุณเอาเปรียบฉัน (หลายปีแล้ว) คำตอบที่ชัดเจน ขอบคุณ.
Soundararajan

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

คุณต้องระบุทุกบรรทัดคือสาขา 1 และสาขา 2 เพื่อรับความคุ้มครอง 100% สำหรับทั้ง LineCoverage และ BranchCoverage

หากคุณพลาดสิ่งอื่นใดไปเลยคุณจะได้รับความคุ้มครองสาขาครึ่งหนึ่ง หากคุณพลาดสิ่งใดใน # บรรทัดทั้งในกรณีและอื่น ๆ คุณจะได้รับ BranchCoverage 100% แต่ไม่ 100% พร้อมความครอบคลุมของไลน์

หวังว่านี่จะช่วยได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.