ฉันใช้ปลั๊กอิน Cobertura Maven สำหรับหนึ่งในโครงการของฉัน แต่ฉันมีคำถามเกี่ยวกับรายงานที่สร้างขึ้น:
ความแตกต่างระหว่าง Line และ Branch coverage คืออะไร?
ฉันใช้ปลั๊กอิน Cobertura Maven สำหรับหนึ่งในโครงการของฉัน แต่ฉันมีคำถามเกี่ยวกับรายงานที่สร้างขึ้น:
ความแตกต่างระหว่าง Line และ Branch coverage คืออะไร?
คำตอบ:
ความครอบคลุมของบรรทัดจะวัดจำนวนข้อความที่คุณใช้ (คำสั่งมักเป็นบรรทัดของรหัสไม่รวมความคิดเห็นเงื่อนไข ฯลฯ ) ความคุ้มครองสาขาจะตรวจสอบว่าคุณเอาสาขาจริงและเท็จสำหรับแต่ละเงื่อนไข (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% ในกรณีแรกดังนั้นคุณจะเห็นว่ามีบางอย่างขาดหายไปในการทดสอบของคุณ (และบ่อยครั้งในรหัสของคุณ)
ใช้รหัสนี้เป็นตัวอย่างง่ายๆ:
if(cond) {
line1();
line2();
line3();
line4();
} else {
line5();
}
หากการทดสอบของคุณใช้เฉพาะความcond
เป็นจริงและไม่เคยดำเนินการตามelse
สาขาที่คุณมี:
นอกจากนี้รายงาน Cobertura ยังแนะนำคำแนะนำเครื่องมือช่วยเหลือป๊อปอัปที่ดีเมื่อคลิกที่ส่วนหัวของคอลัมน์:
Line Coverage - เปอร์เซ็นต์ของบรรทัดที่ดำเนินการโดยการทดสอบนี้
ความครอบคลุมสาขา - เปอร์เซ็นต์ของสาขาที่ดำเนินการโดยการทดสอบนี้
if(cond){
//branch 1
}else{
//branch 2
}
คุณต้องระบุทุกบรรทัดคือสาขา 1 และสาขา 2 เพื่อรับความคุ้มครอง 100% สำหรับทั้ง LineCoverage และ BranchCoverage
หากคุณพลาดสิ่งอื่นใดไปเลยคุณจะได้รับความคุ้มครองสาขาครึ่งหนึ่ง หากคุณพลาดสิ่งใดใน # บรรทัดทั้งในกรณีและอื่น ๆ คุณจะได้รับ BranchCoverage 100% แต่ไม่ 100% พร้อมความครอบคลุมของไลน์
หวังว่านี่จะช่วยได้