Bagaimana cara menghilangkan aturan TemporaryFolder di Junit5

Saya memigrasikan pengujian unit dari Junit4 ke Junit5. Dalam pengujian saya menggunakan TemporaryFolder rule dari Junit4 API. Agar tes tetap berfungsi, saya menambahkan @EnableRuleMigrationSupport anotasi:

@EnableRuleMigrationSupport
public final class SomeTest {

    @Rule
    public final TemporaryFolder tmp = new TemporaryFolder();

   // tests ...
}

Seperti yang saya pahami, di Junit5 saya perlu menggunakan ekstensi alih-alih aturan , tapi saya tidak dapat menemukan pengganti TemporaryFolder di ekstensi Junit5. Apakah itu ada? Bagaimana cara mengganti aturan TemporaryFolder dengan ekstensi dengan benar?


person Kirill    schedule 15.06.2019    source sumber


Jawaban (1)


Anda dapat menggunakan @TempDir anotasi (JUnit 5.4+), dijelaskan dalam §2.20.1 dari Panduan Pengguna JUnit 5. Dari panduan pengguna (penekanan milik saya):

Ekstensi TempDirectory bawaan digunakan untuk membuat dan membersihkan direktori sementara untuk pengujian individual atau semua pengujian di kelas pengujian. Ini terdaftar secara default. Untuk menggunakannya, beri anotasi pada bidang non-pribadi jenis java.nio.file.Path atau java.io.File dengan @TempDir atau tambahkan parameter jenis java.nio.file.Path atau java.io.File yang diberi anotasi @TempDir ke metode siklus hidup atau metode pengujian.

Catatan: Ekstensi ini ditambahkan pada versi 5.4 dan saat ini (mulai 5.7.2) bersifat eksperimental.

Contoh penggunaan bidang instance:

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import java.nio.file.Path; // or use java.io.File

class SomeTests {

    @TempDir
    Path directory; // must be non-private

}

Contoh penggunaan parameter metode pengujian:

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
import java.nio.file.Path; // or use java.io.File

class SomeTests {

    @Test
    void testFoo(@TempDir Path directory) {
        // do test...
    }

}

Catatan: Parameter konstruktor tidak didukung.

Kapan direktori dibuat dan dihapus dijelaskan di Javadoc dari @TempDir:

Pembuatan Direktori Sementara

Direktori sementara hanya dibuat jika bidang dalam kelas pengujian atau parameter dalam metode siklus hidup atau metode pengujian dianotasi dengan @TempDir. Jika tipe bidang atau tipe parameter bukan Path atau File atau jika direktori sementara tidak dapat dibuat, ExtensionConfigurationException atau ParameterResolutionException akan ditampilkan sebagaimana mestinya. Selain itu, ParameterResolutionException akan ditampilkan untuk parameter konstruktor yang dianotasi dengan @TempDir.

Lingkup Direktori Sementara

Cakupan direktori sementara bergantung pada tempat anotasi @TempDir pertama ditemukan saat menjalankan kelas pengujian. Direktori sementara akan dibagikan oleh semua pengujian di kelas ketika anotasi ada pada bidang static atau pada parameter metode @BeforeAll. Jika tidak — misalnya, ketika @TempDir hanya digunakan pada kolom instance atau pada parameter dalam metode pengujian, @BeforeEach, atau @AfterEach — setiap pengujian akan menggunakan direktori sementaranya sendiri.

Penghapusan Direktori Sementara

Ketika akhir cakupan direktori sementara tercapai, yaitu ketika metode pengujian atau kelas telah selesai dieksekusi, JUnit akan mencoba menghapus semua file dan direktori di direktori sementara dan, terakhir, direktori sementara itu sendiri secara rekursif. Jika penghapusan file atau direktori gagal, IOException akan dilempar yang akan menyebabkan tes atau kelas pengujian gagal.

person Slaw    schedule 15.06.2019
comment
Dan apa yang harus dilakukan dengan junit 5.3? Saya terjebak dengan versi yang lebih lama... - person Juh_; 02.03.2020
comment
Saya rasa tidak ada penggantinya di JUnit versi yang lebih lama dari 5.4. Anda harus meningkatkan ke versi 5.4+ atau terus menggunakan @EnableRuleMigrationSupport. Meskipun menurut saya Anda dapat menulis ekstensi Anda sendiri. - person Slaw; 02.03.2020