Menggunakan JUnit 5 dengan Gradle

1. Ikhtisar

Dalam tutorial ini, kita akan menjalankan pengujian pada platform JUnit 5 baru dengan alat build Gradle.

Kami akan mengonfigurasi proyek yang mendukung versi lama dan baru.

Jangan ragu untuk membaca Panduan untuk JUnit 5 untuk informasi lebih lanjut tentang versi baru. Atau Pengantar Gradle untuk informasi mendalam tentang alat build.

2. Penyiapan Gradle

Pertama, kami memverifikasi jika versi 4.6 atau lebih tinggi dari alat pembangunan diinstal karena itu adalah versi paling awal yang bekerja dengan JUnit 5.

Cara termudah adalah dengan menjalankan perintah gradle -v :

$> gradle -v ------------------------------------------------------------ Gradle 4.10.2 ------------------------------------------------------------

Dan, jika perlu, kita bisa mengikuti langkah-langkah instalasi untuk mendapatkan versi yang tepat.

Setelah kita menginstal semuanya, kita perlu mengkonfigurasi Gradle dengan menggunakan file build.gradle .

Kita bisa mulai dengan menyediakan platform pengujian unit ke alat build:

test { useJUnitPlatform() } 

Sekarang setelah kita menentukan platformnya, kita perlu menyediakan dependensi JUnit. Di sinilah kami melihat perbedaan penting antara JUnit 5 dan versi sebelumnya.

Lihat, dengan versi sebelumnya, kami hanya membutuhkan satu dependensi. Dalam JUnit 5, API dipisahkan dari runtime, yang berarti dua dependensi.

API dimanifestasikan dengan junit-jupiter-api . Runtime-nya adalah junit-jupiter-engine untuk JUnit 5, dan junit-vintage-engine untuk JUnit 3 atau 4.

Kami akan menyediakan keduanya di testImplementation dan timeRuntimeOnly , masing-masing:

dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api:5.3.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.3.1' }

3. Membuat Tes

Mari tulis tes pertama kita. Ini terlihat seperti versi sebelumnya:

@Test public void testAdd() { assertEquals(42, Integer.sum(19, 23)); }

Sekarang, kita dapat menjalankan pengujian dengan menjalankan perintah tes bersih gradle .

Untuk memverifikasi bahwa kami menggunakan JUnit 5, kami dapat melihat impornya. Impor @Test dan assertEquals harus memiliki paket yang dimulai dengan org.junit.jupiter.api:

import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals;

Jadi di contoh terakhir, kami membuat pengujian dengan fungsionalitas 'lama' yang telah berfungsi selama bertahun-tahun. Sekarang kita akan membuat contoh lain yang menggunakan beberapa fungsi baru di JUnit 5:

@Test public void testDivide() { assertThrows(ArithmeticException.class, () -> { Integer.divideUnsigned(42, 0); }); }

assertThrows adalah pernyataan baru di JUnit5 yang menggantikan gaya lama @Test (expected = ArithmeticException.class).

4. Mengonfigurasi Pengujian JUnit 5 Dengan Gradle

Selanjutnya, kita akan mempelajari beberapa integrasi yang lebih dalam antara Gradle dan JUnit5.

Misalkan kita memiliki dua jenis pengujian dalam rangkaian kita: jangka panjang dan jangka pendek. Kita bisa menggunakan anotasi JUnit 5 @Tag :

public class CalculatorJUnit5Test { @Tag("slow") @Test public void testAddMaxInteger() { assertEquals(2147483646, Integer.sum(2147183646, 300000)); } @Tag("fast") @Test public void testDivide() { assertThrows(ArithmeticException.class, () -> { Integer.divideUnsigned(42, 0); }); } }

Kemudian, kami memberi tahu alat build mana yang akan dijalankan. Dalam kasus kita, mari kita jalankan tes yang berjalan singkat (cepat):

test { useJUnitPlatform { includeTags 'fast' excludeTags 'slow' } }

5. Mengaktifkan Dukungan untuk Versi Lama

Sekarang, masih memungkinkan untuk membuat pengujian JUnit 3 dan 4 dengan mesin Jupiter baru. Terlebih lagi, kami dapat menggabungkannya dengan versi baru dalam proyek yang sama, katakanlah, dalam skenario migrasi.

Untuk memulai, kami menambahkan beberapa dependensi ke konfigurasi build yang ada:

testCompileOnly 'junit:junit:4.12' testRuntimeOnly 'org.junit.vintage:junit-vintage-engine:5.3.1'

Perhatikan bagaimana proyek kami sekarang memiliki junit-jupiter-engine dan juga junit-vintage-engine.

Sekarang kita membuat kelas baru dan copy paste metode testDivide yang kita buat sebelumnya. Kemudian, kami menambahkan impor untuk @Test dan assertEquals . Namun, kali ini kami memastikan untuk menggunakan paket versi 4 lama yang dimulai dengan org.junit:

import static org.junit.Assert.assertEquals; import org.junit.Test; public class CalculatorJUnit4Test { @Test public void testAdd() { assertEquals(42, Integer.sum(19, 23)); } }

6. Kesimpulan

Dalam tutorial ini, kami mengintegrasikan Gradle dengan JUnit 5. Terlebih lagi, kami juga menambahkan dukungan untuk versi 3 dan 4.

Kami telah melihat bahwa alat pembangunan memberikan dukungan yang sangat baik untuk versi lama dan baru. Karenanya kita dapat menggunakan fitur baru dalam proyek yang sudah ada tanpa perlu mengubah semua pengujian yang ada.

Contoh kode lengkap tersedia di proyek GitHub. Jangan ragu untuk menggunakannya sebagai titik awal untuk proyek Anda sendiri.