Panduan untuk Diulangi di Junit 5

1. Ikhtisar

Dalam artikel singkat ini, kita akan melihat anotasi @RepressedTest yang diperkenalkan di JUnit 5. Ini memberi kita cara yang ampuh untuk menulis tes apa pun yang ingin kita ulangi beberapa kali.

Jika Anda ingin mempelajari lebih lanjut tentang JUnit 5, lihat artikel kami yang lain yang menjelaskan dasar-dasar dan panduan untuk JUnit 5.

2. Ketergantungan dan Penyiapan Maven

Hal pertama yang harus diperhatikan adalah JUnit 5 membutuhkan Java 8 untuk dijalankan. Karena itu, mari kita lihat dependensi Maven:

 org.junit.jupiter junit-jupiter-engine 5.7.0 test 

Ini adalah dependensi JUnit 5 utama yang perlu kita tambahkan untuk menulis pengujian kita. Lihat versi terbaru artefak di sini.

3. Sederhana @RepeatedTest Contoh

Membuat pengujian berulang itu sederhana - cukup tambahkan anotasi @Rep berulangTest di atas metode pengujian:

@RepeatedTest(3) void repeatedTest(TestInfo testInfo) { System.out.println("Executing repeated test"); assertEquals(2, Math.addExact(1, 1), "1 + 1 should equal 2"); }

Perhatikan bahwa bukannya standar @ Test penjelasan, kita menggunakan @RepeatedTest untuk tes unit kami. Tes di atas akan dijalankan tiga kali seolah-olah tes yang sama ditulis tiga kali.

Laporan pengujian (file laporan atau hasil di tab JUnit IDE Anda) akan menampilkan semua eksekusi:

repetition 1 of 3(repeatedTest(TestInfo)) repetition 2 of 3(repeatedTest(TestInfo)) repetition 3 of 3(repeatedTest(TestInfo))

4. Dukungan Siklus Hidup untuk @Rep berulangTest

Setiap pelaksanaan @RepeatedTest akan berperilaku seperti biasa @ Test memiliki tes JUnit siklus hidup dukungan penuh. Artinya, selama setiap eksekusi, metode @BeforeEach dan @AfterEach akan dipanggil. Untuk mendemonstrasikan ini, cukup tambahkan metode yang sesuai di kelas pengujian:

@BeforeEach void beforeEachTest() { System.out.println("Before Each Test"); } @AfterEach void afterEachTest() { System.out.println("After Each Test"); System.out.println("====================="); }

Jika kami menjalankan pengujian kami sebelumnya, hasilnya akan ditampilkan di konsol:

Before Each Test Executing repeated test After Each Test ===================== Before Each Test Executing repeated test After Each Test ===================== Before Each Test Executing repeated test After Each Test =====================

Seperti yang bisa kita lihat, metode @BeforeEach dan @AfterEach dipanggil di sekitar setiap eksekusi .

5. Konfigurasi Nama Tes

Dalam contoh pertama, kami telah mengamati bahwa output dari laporan pengujian tidak mengandung pengenal apa pun. Ini dapat dikonfigurasi lebih lanjut menggunakan atribut name :

@RepeatedTest(value = 3, name = RepeatedTest.LONG_DISPLAY_NAME) void repeatedTestWithLongName() { System.out.println("Executing repeated test with long name"); assertEquals(2, Math.addExact(1, 1), "1 + 1 should equal 2"); }

Outputnya sekarang akan berisi nama metode bersama dengan indeks pengulangan:

repeatedTestWithLongName() :: repetition 1 of 3(repeatedTestWithLongName()) repeatedTestWithLongName() :: repetition 2 of 3(repeatedTestWithLongName()) repeatedTestWithLongName() :: repetition 3 of 3(repeatedTestWithLongName())

Pilihan lainnya adalah dengan menggunakan RepeatTest.SHORT_DISPLAY_NAME yang akan menghasilkan nama pendek tes:

repetition 1 of 3(repeatedTestWithShortName()) repetition 2 of 3(repeatedTestWithShortName()) repetition 3 of 3(repeatedTestWithShortName())

Namun, jika kami perlu menggunakan nama kustom kami, itu sangat mungkin:

@RepeatedTest(value = 3, name = "Custom name {currentRepetition}/{totalRepetitions}") void repeatedTestWithCustomDisplayName(TestInfo testInfo) { assertEquals(2, Math.addExact(1, 1), "1 + 1 should equal 2"); }

The {currentRepetition} dan {totalRepetitions} adalah placeholder untuk pengulangan saat ini dan jumlah pengulangan. Nilai-nilai ini secara otomatis disediakan oleh JUnit pada waktu proses, dan tidak diperlukan konfigurasi tambahan. Hasilnya cukup banyak seperti yang kami harapkan:

Custom name 1/3(repeatedTestWithCustomDisplayName()) Custom name 2/3(repeatedTestWithCustomDisplayName()) Custom name 3/3(repeatedTestWithCustomDisplayName())

6. Mengakses RepetitionInfo

Terlepas dari atribut name , JUnit juga menyediakan akses ke metadata pengulangan dalam kode pengujian kami. Ini dicapai dengan menambahkan parameter RepetitionInfo ke metode pengujian kami:

@RepeatedTest(3) void repeatedTestWithRepetitionInfo(RepetitionInfo repetitionInfo) { System.out.println("Repetition #" + repetitionInfo.getCurrentRepetition()); assertEquals(3, repetitionInfo.getTotalRepetitions()); }

Outputnya akan berisi indeks pengulangan saat ini untuk setiap eksekusi:

Repetition #1 Repetition #2 Repetition #3

The RepetitionInfo disediakan oleh RepetitionInfoParameterResolver dan hanya tersedia dalam konteks @RepeatedTest.

7. Kesimpulan

Dalam tutorial singkat ini, kami menjelajahi anotasi @RepeatTest yang disediakan oleh JUnit dan mempelajari berbagai cara untuk mengonfigurasinya.

Jangan lupa untuk memeriksa kode sumber lengkap untuk artikel ini di GitHub.