Pengantar Cobertura

1. Ikhtisar

Pada artikel ini, kami akan mendemonstrasikan beberapa aspek menghasilkan laporan cakupan kode menggunakan Cobertura .

Sederhananya, Cobertura adalah alat pelaporan yang menghitung cakupan pengujian untuk basis kode - persentase cabang / garis yang diakses oleh pengujian unit dalam proyek Java.

2. Plugin Maven

2.1. Konfigurasi Maven

Untuk mulai menghitung cakupan kode dalam proyek Java Anda, Anda perlu mendeklarasikan plugin Cobertura Maven di file pom.xml Anda di bawah bagian pelaporan:

   org.codehaus.mojo cobertura-maven-plugin 2.7   

Anda selalu dapat memeriksa versi terbaru plugin di repositori pusat Maven.

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

Ini akan membuat laporan gaya HTML mendetail yang menampilkan statistik cakupan kode yang dikumpulkan melalui instrumentasi kode:

Metrik cakupan garis menunjukkan berapa banyak pernyataan yang dieksekusi dalam Pengujian Unit yang dijalankan, sedangkan metrik cakupan cabang berfokus pada berapa banyak cabang yang dicakup oleh pengujian tersebut .

Untuk setiap kondisional, Anda memiliki dua cabang, jadi pada dasarnya, Anda akan memiliki dua kali lebih banyak cabang kondisional.

Faktor kompleksitas mencerminkan kompleksitas kode - ia naik ketika jumlah cabang dalam kode meningkat.

Secara teori, semakin banyak cabang yang Anda miliki, semakin banyak tes yang perlu Anda terapkan untuk meningkatkan skor cakupan cabang.

2.2. Mengonfigurasi Perhitungan dan Pemeriksaan Cakupan Kode

Anda dapat mengabaikan / mengecualikan sekumpulan kelas tertentu dari instrumentasi kode menggunakan tag ignore dan exclude :

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

Setelah menghitung cakupan kode, tibalah tahap pemeriksaan . The cek fase memastikan bahwa tingkat tertentu cakupan kode tercapai .

Berikut adalah contoh dasar tentang cara mengonfigurasi fase pemeriksaan :

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

Saat menggunakan flag haltOnFailure , Cobertura akan menyebabkan build gagal jika salah satu pemeriksaan yang ditentukan gagal.

The branchRate / lineRate tag menentukan minimum yang dapat diterima cabang / line cakupan skor diperlukan setelah kode instrumentasi. Pemeriksaan ini dapat diperluas ke tingkat paket menggunakan tag packageLineRate / packageBranchRate .

Juga dimungkinkan untuk mendeklarasikan pemeriksaan aturan khusus untuk kelas dengan nama yang mengikuti pola tertentu dengan menggunakan tag regex . Dalam contoh di atas, kami memastikan bahwa skor cakupan jalur / cabang tertentu harus dicapai untuk kelas dalam paket com.baeldung.algorithms.dijkstra dan di bawahnya.

3. Plugin Eclipse

3.1. Instalasi

Cobertura juga tersedia sebagai plugin Eclipse yang disebut eCobertura . Untuk menginstal eCobertura untuk Eclipse, Anda harus mengikuti langkah-langkah di bawah ini dan menginstal Eclipse versi 3.5 atau yang lebih baru:

Langkah 1: Dari menu Eclipse, pilih HelpInstall New Software . Kemudian, saat bekerja dengan lapangan, masukkan //ecobertura.johoop.de/update/ :

Langkah 2: Pilih Cakupan Kode eCobertura , klik "berikutnya", lalu ikuti langkah-langkah di wizard penginstalan.

Sekarang eCobertura telah terinstal, restart Eclipse dan tunjukkan tampilan sesi cakupan di bawah Windows → Show View → Other → Cobertura .

3.2. Menggunakan Eclipse Kepler atau Nanti

Untuk versi Eclipse yang lebih baru (Kepler, Luna, dll.), Penginstalan eCobertura dapat menyebabkan beberapa masalah terkait JUnit - versi JUnit yang lebih baru yang dipaketkan dengan Eclipse tidak sepenuhnya kompatibel dengan pemeriksa dependensi 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 solusinya, Anda dapat mengunduh JUnit versi lama dan meletakkannya di folder plugin Eclipse.

Ini dapat dilakukan dengan menghapus folder org.junit. *** dari % ECLIPSE_HOME% / plugins , dan kemudian menyalin folder yang sama dari instalasi Eclipse lama yang kompatibel dengan eCobertura .

Setelah selesai, mulai ulang IDE Eclipse Anda dan instal ulang plugin menggunakan situs pembaruan yang sesuai.

3.3. Laporan Cakupan Kode di Eclipse

Untuk menghitung cakupan kode dengan Tes Unit, klik kanan proyek / tes Anda untuk membuka menu konteks, lalu pilih opsi Cover As → JUnit Test .

Di bawah tampilan Sesi Cakupan , Anda dapat memeriksa laporan cakupan jalur / cabang per kelas:

Pengguna Java 8 mungkin mengalami kesalahan umum saat menghitung cakupan kode:

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

Dalam kasus ini, Java mengeluhkan beberapa metode yang tidak memiliki peta tumpukan yang tepat, karena verifikator bytecode yang lebih ketat diperkenalkan di versi Java yang lebih baru.

Masalah ini dapat diselesaikan dengan menonaktifkan verifikasi di Mesin Virtual Java.

Untuk melakukannya, klik kanan proyek Anda untuk membuka menu konteks, pilih Sampul Sebagai , lalu buka tampilan Konfigurasi Cakupan . Di tab argumen, tambahkan tanda -noverify sebagai argumen VM. Terakhir, klik tombol cakupan untuk memulai penghitungan cakupan.

Anda juga dapat menggunakan tanda -XX: -UseSplitVerifier , tetapi ini hanya berfungsi dengan Java 6 dan 7, karena pemverifikasi terpisah tidak lagi didukung di Java 8.

4. Kesimpulan

Pada artikel ini, kami telah menunjukkan secara singkat bagaimana menggunakan Cobertura untuk menghitung cakupan kode dalam proyek Java. Kami juga telah menjelaskan langkah-langkah yang diperlukan untuk menginstal eCobertura di lingkungan Eclipse Anda.

Cobertura adalah alat cakupan kode yang hebat namun sederhana, tetapi tidak secara aktif dipertahankan, karena saat ini dikalahkan oleh alat yang lebih baru dan lebih kuat seperti JaCoCo.

Terakhir, Anda dapat melihat contoh yang diberikan dalam artikel ini di proyek GitHub .