Saya menggunakan plugin Cobertura Maven untuk salah satu proyek saya. Tapi saya punya pertanyaan tentang laporan yang dihasilkan:
Apa perbedaan antara cakupan jalur dan cabang?
Saya menggunakan plugin Cobertura Maven untuk salah satu proyek saya. Tapi saya punya pertanyaan tentang laporan yang dihasilkan:
Apa perbedaan antara cakupan jalur dan cabang?
Jawaban:
Cakupan baris mengukur berapa banyak pernyataan yang Anda ambil (pernyataan biasanya berupa baris kode, tidak termasuk komentar, persyaratan, dll). Cakupan cabang memeriksa apakah Anda mengambil cabang benar dan salah untuk setiap bersyarat (jika, sementara, untuk). Anda akan memiliki cabang dua kali lebih banyak sebagai kondisional.
Kenapa kamu peduli Perhatikan contohnya:
public int getNameLength(boolean isCoolUser) {
User user = null;
if (isCoolUser) {
user = new John();
}
return user.getName().length();
}
Jika Anda memanggil metode ini dengan isCoolUser
set to true
, Anda mendapatkan 100% cakupan pernyataan. Kedengarannya bagus? TIDAK, akan ada pointer nol jika Anda menelepon dengan false
. Namun, Anda memiliki 50% cakupan cabang pada kasus pertama, sehingga Anda dapat melihat ada sesuatu yang hilang dalam pengujian Anda (dan seringkali, dalam kode Anda).
Ambil kode ini sebagai contoh yang disederhanakan:
if(cond) {
line1();
line2();
line3();
line4();
} else {
line5();
}
Jika pengujian Anda hanya melatih cond
kebenaran dan tidak pernah menjalankan else
cabang yang Anda miliki:
Juga laporan Cobertura itu sendiri memperkenalkan beberapa tooltips bantuan pop-up yang bagus saat header kolom diklik:
Cakupan Garis - Persentase garis yang dieksekusi oleh pengujian ini.
Cakupan Cabang - Persentase cabang yang dijalankan oleh uji coba ini.
if(cond){
//branch 1
}else{
//branch 2
}
Anda perlu mengatasi semua lini adalah cabang 1 dan cabang 2 untuk mendapatkan cakupan 100% untuk LineCoverage dan BranchCoverage.
Jika Anda melewatkan hal lain, Anda akan mendapatkan setengah dari cakupan cabang. Jika Anda melewatkan sesuatu di # baris di if dan lainnya, Anda akan mendapatkan BranchCoverage 100% tetapi tidak 100% dengan cakupan baris.
Semoga ini membantu.