Menggunakan JUnit 5 dengan Gradle

1. Gambaran keseluruhan

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

Kami akan mengkonfigurasi projek yang menyokong versi lama dan baru.

Jangan ragu untuk membaca Panduan untuk JUnit 5 untuk maklumat lebih lanjut mengenai versi baru. Atau Pengenalan Gradle untuk maklumat mendalam mengenai alat binaan.

2. Persediaan Gradle

Pertama, kami mengesahkan sama ada versi 4.6 atau lebih tinggi alat binaan dipasang kerana itu adalah versi paling awal yang berfungsi dengan JUnit 5.

Cara paling mudah adalah dengan menjalankan perintah gradle -v :

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

Dan, jika perlu, kita dapat mengikuti langkah pemasangan untuk mendapatkan versi yang tepat.

Setelah memasang semuanya, kita perlu mengkonfigurasi Gradle dengan menggunakan fail build.gradle .

Kita boleh mulakan dengan menyediakan platform ujian unit ke alat binaan:

test { useJUnitPlatform() } 

Sekarang setelah kami menentukan platform, kami perlu menyediakan pergantungan JUnit. Di sinilah kita melihat perbezaan yang ketara antara JUnit 5 dan versi sebelumnya.

Lihat, dengan versi sebelumnya, kami hanya memerlukan satu pergantungan. Walau bagaimanapun, dalam JUnit 5, API dipisahkan dari runtime, yang bermaksud dua kebergantungan.

API ditunjukkan dengan junit-jupiter-api . Waktu operasi adalah mesin junit-jupiter untuk JUnit 5, dan mesin junit-vintaj untuk JUnit 3 atau 4.

Kami akan membekalkan kedua-duanya dalam 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 Ujian

Mari tulis ujian pertama kami. Ia seperti versi sebelumnya:

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

Sekarang, kita dapat menjalankan ujian dengan melaksanakan perintah ujian gradle clean .

Untuk mengesahkan bahawa kami menggunakan JUnit 5, kami dapat melihat importnya. Import untuk @Test dan assertEquals harus mempunyai pakej bermula dengan org.junit.jupiter.api:

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

Jadi dalam contoh terakhir, kami membuat ujian dengan fungsi 'lama' yang telah berjalan selama bertahun-tahun. Kami sekarang 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 penegasan baru dalam JUnit5 yang menggantikan gaya lama @Test (dijangka = ArithmeticException.class).

4. Mengkonfigurasi Ujian JUnit 5 Dengan Gradle

Seterusnya, kami akan meneroka beberapa integrasi yang lebih mendalam antara Gradle dan JUnit5.

Katakan bahawa kita mempunyai dua jenis ujian di suite kita: jangka panjang dan jangka pendek. Kami boleh 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 memberitahu alat binaan yang mana yang harus dilaksanakan. Dalam kes kami, mari kita laksanakan ujian jangka pendek (cepat):

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

5. Mengaktifkan Sokongan untuk Versi Lama

Sekarang, masih mungkin untuk membuat ujian JUnit 3 dan 4 dengan mesin Jupiter yang baru. Lebih-lebih lagi, kita boleh mencampurkannya dengan versi baru dalam projek yang sama, katakanlah, dalam senario migrasi.

Untuk memulakan, kami menambahkan beberapa kebergantungan pada konfigurasi binaan yang ada:

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

Perhatikan bagaimana projek kami sekarang mempunyai enjin junit-jupiter dan juga mesin junit-vintaj.

Sekarang kita membuat kelas baru dan copy paste kaedah testDivide yang kita buat sebelumnya. Kemudian, kami menambah import untuk @Test dan assertEquals . Walau bagaimanapun, kali ini kami memastikan untuk menggunakan pakej versi 4 lama bermula org.junit mana :

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

6. Kesimpulannya

Dalam tutorial ini, kami menggabungkan Gradle dengan JUnit 5. Lebih-lebih lagi, kami juga menambahkan sokongan untuk versi 3 dan 4.

Kami telah melihat bahawa alat binaan memberikan sokongan yang sangat baik untuk versi lama dan baru. Oleh itu kita boleh menggunakan ciri baru dalam projek yang ada tanpa perlu mengubah semua ujian yang ada.

Contoh kod yang lengkap terdapat dalam projek GitHub. Jangan ragu untuk menggunakannya sebagai titik permulaan untuk projek anda sendiri.