Pengenalan Cobertura

1. Gambaran keseluruhan

Dalam artikel ini, kami akan menunjukkan beberapa aspek dalam menghasilkan laporan liputan kod menggunakan Cobertura .

Ringkasnya, Cobertura adalah alat pelaporan yang menghitung liputan ujian untuk pangkalan kode - peratusan cabang / garis yang diakses oleh uji unit dalam proyek Java.

2. Plugin Maven

2.1. Konfigurasi Maven

Untuk mula menghitung liputan kod dalam projek Java anda, anda perlu menyatakan plugin Cobertura Maven dalam fail pom.xml anda di bawah bahagian pelaporan:

   org.codehaus.mojo cobertura-maven-plugin 2.7   

Anda sentiasa boleh memeriksa versi terkini plugin di repositori pusat Maven.

Setelah selesai, teruskan dan jalankan Maven menentukan cobertura: cobertura sebagai gol.

Ini akan membuat laporan gaya HTML terperinci yang menunjukkan statistik liputan kod yang dikumpulkan melalui instrumen kod:

Metrik liputan garis menunjukkan berapa banyak pernyataan yang dilaksanakan dalam Ujian Unit yang dijalankan, sementara metrik liputan cawangan menumpukan pada berapa banyak cabang yang diliputi oleh ujian tersebut .

Untuk setiap bersyarat, anda mempunyai dua cawangan, jadi pada asasnya, anda akan mempunyai dua cabang lebih banyak daripada bersyarat.

Faktor kerumitan menggambarkan kerumitan kod - ia meningkat apabila bilangan cawangan dalam kod meningkat.

Secara teori, semakin banyak cabang yang anda miliki, semakin banyak ujian yang perlu anda laksanakan untuk meningkatkan skor liputan cawangan.

2.2. Mengkonfigurasi Pengiraan dan Pemeriksaan Liputan Kod

Anda boleh mengabaikan / mengecualikan sekumpulan kelas tertentu dari instrumen kod menggunakan tag abaikan dan kecualikan :

 org.codehaus.mojo cobertura-maven-plugin 2.7    com/baeldung/algorithms/dijkstra/*   com/baeldung/algorithms/dijkstra/*    

Setelah mengira liputan kod datang fasa pemeriksaan . The menyemak fasa memastikan had tertentu liputan kod dicapai .

Berikut adalah contoh asas mengenai cara mengkonfigurasi fasa pemeriksaan :

  true 75 85 75 85 75 85   com.baeldung.algorithms.dijkstra.* 60 50    

Semasa menggunakan bendera haltOnFailure , Cobertura akan menyebabkan binaan gagal jika salah satu pemeriksaan yang ditentukan gagal.

The branchRate / lineRate tag nyatakan cawangan / garis skor liputan boleh diterima minimum yang diperlukan selepas kod instrumentasi. Pemeriksaan ini dapat diperluas ke peringkat paket menggunakan tag packageLineRate / packageBranchRate .

Juga memungkinkan untuk menyatakan pemeriksaan peraturan khusus untuk kelas dengan nama yang mengikuti corak tertentu dengan menggunakan tag regex . Dalam contoh di atas, kami memastikan bahawa skor liputan baris / cawangan tertentu mesti dicapai untuk kelas dalam pakej com.baeldung.algorithms.dijkstra dan ke bawah.

3. Pemalam Eclipse

3.1. Pemasangan

Cobertura juga tersedia sebagai plugin Eclipse yang disebut eCobertura . Untuk memasang eCobertura untuk Eclipse, anda perlu mengikuti langkah-langkah di bawah ini dan memasang Eclipse versi 3.5 atau lebih tinggi:

Langkah 1: Dari menu Eclipse, pilih BantuanPasang Perisian Baru . Kemudian, semasa bekerja dengan lapangan, masukkan //ecobertura.johoop.de/update/ :

Langkah 2: Pilih Liputan Kod eCobertura , klik "seterusnya", dan kemudian ikuti langkah-langkah dalam wizard pemasangan.

Sekarang eCobertura dipasang, mulakan semula Eclipse dan menunjukkan pandangan sesi perlindungan di bawah Windows → Tunjuk View → lain → Cobertura .

3.2. Menggunakan Eclipse Kepler atau Kemudian

Untuk versi Eclipse yang lebih baru (Kepler, Luna, dll.), Pemasangan eCobertura boleh menyebabkan beberapa masalah yang berkaitan dengan JUnit - versi JUnit yang lebih baru yang dibungkus dengan Eclipse tidak sepenuhnya sesuai dengan pemeriksa kebergantungan eCobertura :

Cannot complete the install because one or more required items could not be found. Software being installed: eCobertura 0.9.8.201007202152 (ecobertura.feature.group 0.9.8.201007202152) Missing requirement: eCobertura UI 0.9.8.201007202152 (ecobertura.ui 0.9.8.201007202152) requires 'bundle org.junit4 0.0.0' but it could not be found Cannot satisfy dependency: From: eCobertura 0.9.8.201007202152 (ecobertura.feature.group 0.9.8.201007202152) To: ecobertura.ui [0.9.8.201007202152]

Sebagai jalan penyelesaian, anda boleh memuat turun JUnit versi lama dan memasukkannya ke dalam folder pemalam Eclipse.

Ini dapat dilakukan dengan menghapus folder org.junit. *** dari % ECLIPSE_HOME% / plugin , dan kemudian menyalin folder yang sama dari pemasangan Eclipse lama yang serasi dengan eCobertura .

Setelah selesai, mulakan semula Eclipse IDE anda dan pasang semula plugin menggunakan laman kemas kini yang sesuai.

3.3. Laporan Liputan Kod di Eclipse

Untuk mengira liputan kod dengan Ujian Unit, klik kanan projek / ujian anda untuk membuka menu konteks, kemudian pilih pilihan Cover As → Uji JUnit .

Di bawah paparan Sesi Liputan , anda boleh menyemak laporan liputan garis / cawangan setiap kelas:

Pengguna Java 8 mungkin menghadapi kesalahan umum ketika menghitung liputan kod:

java.lang.VerifyError: Expecting a stackmap frame at branch target ...

Dalam hal ini, Java mengeluh tentang beberapa metode yang tidak memiliki peta tumpukan yang tepat, karena pengesahan bytecode yang lebih ketat diperkenalkan pada versi Java yang lebih baru.

Masalah ini dapat diselesaikan dengan mematikan pengesahan di Java Virtual Machine.

Untuk melakukannya, klik kanan projek anda untuk membuka menu konteks, pilih Cover As , dan kemudian buka paparan Coverage Configurations . Di tab argumen, tambahkan bendera -noverify sebagai argumen VM. Akhirnya, klik pada butang liputan untuk melancarkan pengiraan liputan.

Anda juga dapat menggunakan bendera -XX: -UseSplitVerifier , tetapi ini hanya berfungsi dengan Java 6 dan 7, kerana pembahagi pemisah tidak lagi disokong di Java 8.

4. Kesimpulan

Dalam artikel ini, kami telah menunjukkan secara ringkas cara menggunakan Cobertura untuk menghitung liputan kod dalam sebuah projek Java. Kami juga telah menerangkan langkah-langkah yang diperlukan untuk memasang eCobertura di persekitaran Eclipse anda.

Cobertura adalah alat liputan kod yang hebat namun sederhana, tetapi tidak dikekalkan secara aktif, kerana ia kini dikalahkan oleh alat yang lebih baru dan lebih kuat seperti JaCoCo.

Akhirnya, anda boleh melihat contoh yang diberikan dalam artikel ini dalam projek GitHub .