Sự khác biệt giữa phạm vi phủ sóng của Đường dây và Chi nhánh


93

Tôi sử dụng plugin Cobertura Maven cho một trong những dự án của mình. Nhưng tôi có một câu hỏi về báo cáo đã tạo:

Sự khác biệt giữa phạm vi phủ sóng đường dây và chi nhánh là gì?

Câu trả lời:


168

Mức độ phù hợp của dòng đo lường số lượng câu lệnh bạn đã thực hiện (một câu lệnh thường là một dòng mã, không bao gồm nhận xét, điều kiện, v.v.). Chi nhánh tính toán trung bình kiểm tra xem bạn đã lấy chi nhánh đúng và sai cho mỗi điều kiện (nếu, trong khi, cho). Bạn sẽ có gấp đôi số nhánh so với điều kiện.

Bạn quan tâm làm gì? Hãy xem xét ví dụ:

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

Nếu bạn gọi phương thức này với isCoolUserset to true, bạn sẽ nhận được 100% phạm vi sao kê. Nghe hay không? NOPE, sẽ có một con trỏ null nếu bạn gọi bằng false. Tuy nhiên, bạn có 50% phạm vi chi nhánh trong trường hợp đầu tiên, vì vậy bạn có thể thấy có điều gì đó bị thiếu trong thử nghiệm của mình (và thường là trong mã của bạn).


8
Câu trả lời chính xác! Nó cho thấy khi độ phủ của dòng cho cảm giác sai là có mã tốt!
MAGx2

Bạn có thể gặp những lỗi gì do phạm vi phủ sóng của đường dây hoặc chi nhánh?
Emna Ayadi

61

Lấy mã này làm ví dụ đơn giản:

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

Nếu bài kiểm tra của bạn chỉ thực hiện condđúng và không bao giờ chạy elsenhánh bạn có:

  • 4 trong số 5 dòng được bao phủ
  • 1 trong 2 chi nhánh được bảo hiểm

Ngoài ra, bản thân báo cáo Cobertura cũng giới thiệu một số chú giải công cụ trợ giúp cửa sổ bật lên hay khi tiêu đề cột được nhấp vào:

Mức độ phủ sóng - Phần trăm số dòng được thực hiện bởi lần chạy thử nghiệm này.

Phạm vi chi nhánh - Phần trăm các chi nhánh được thực hiện bởi lần chạy thử nghiệm này.


Tôi đã hy vọng viết câu trả lời này, nhưng bạn đã đánh lừa tôi (nhiều năm). Câu trả lời rõ ràng. Cảm ơn.
Soundararajan

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

Bạn cần giải quyết tất cả các đường là nhánh 1 và nhánh 2 để có được mức độ phủ sóng 100% cho cả LineCoverage và BranchCoverage.

Nếu bạn bỏ lỡ bất cứ điều gì khác, bạn sẽ nhận được một nửa bảo hiểm chi nhánh. Nếu bạn đã bỏ lỡ bất cứ điều gì trong # dòng trong cả if và else, bạn sẽ nhận được BranchCoverage là 100% nhưng không phải 100% với phạm vi phủ sóng của line.

Hi vọng điêu nay co ich.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.