Dapatkan Jalur Direktori / src / test / resources di JUnit

1. Ikhtisar

Terkadang selama pengujian unit, kita mungkin perlu membaca beberapa file dari classpath atau meneruskan file ke objek yang sedang diuji. Atau, kami mungkin memiliki file di src / test / resources dengan data untuk stub yang dapat digunakan oleh pustaka seperti WireMock.

Dalam tutorial ini, kami akan menunjukkan cara membaca jalur direktori / src / test / resources .

2. Ketergantungan Maven

Pertama, kita perlu menambahkan JUnit 5 ke dependensi Maven kita:

 org.junit.jupiter junit-jupiter-engine 5.4.2 

Kami dapat menemukan versi terbaru JUnit 5 di Maven Central.

2. Menggunakan java.io.File

Pendekatan paling sederhana menggunakan instance kelas java.io.File untuk membaca direktori / src / test / resources , dengan memanggil metode getAbsolutePath () :

String path = "src/test/resources"; File file = new File(path); String absolutePath = file.getAbsolutePath(); System.out.println(absolutePath); assertTrue(absolutePath.endsWith("src/test/resources"));

Perhatikan bahwa jalur ini relatif terhadap direktori kerja saat ini , yang berarti direktori proyek.

Mari kita lihat contoh keluaran saat menjalankan pengujian di macOS:

/Users/user.name/my_projects/tutorials/testing-modules/junit-5-configuration/src/test/resources

3. Menggunakan Path

Selanjutnya, kita bisa menggunakan kelas Path , yang diperkenalkan di Java 7 .

Pertama, kita perlu memanggil metode pabrik statis - Paths.get (). Kemudian, kami akan mengonversi Path to File. Pada akhirnya, kita hanya perlu memanggil getAbsolutePath () , seperti pada contoh sebelumnya:

Path resourceDirectory = Paths.get("src","test","resources"); String absolutePath = resourceDirectory.toFile().getAbsolutePath(); System.out.println(absolutePath); Assert.assertTrue(absolutePath.endsWith("src/test/resources")); 

Dan, kami akan mendapatkan hasil yang sama seperti pada contoh sebelumnya:

/Users/user.name/my_projects/tutorials/testing-modules/junit-5-configuration/src/test/resources

4. Menggunakan ClassLoader

Terakhir, kita juga bisa menggunakan ClassLoader :

String resourceName = "example_resource.txt"; ClassLoader classLoader = getClass().getClassLoader(); File file = new File(classLoader.getResource(resourceName).getFile()); String absolutePath = file.getAbsolutePath(); System.out.println(absolutePath); assertTrue(absolutePath.endsWith("/example_resource.txt")); 

Dan, mari kita lihat hasilnya:

/Users/user.name/my_projects/tutorials/testing-modules/junit-5-configuration/target/test-classes/example_resource.txt

Perhatikan bahwa saat ini, kami memiliki file /junit-5-configuration/target/test-classes/example-resource.txt . Ini berbeda ketika kita membandingkan hasil dengan metode sebelumnya.

Hal ini karena yang ClassLoader mencari sumber daya pada classpath . Di Maven, class dan resource yang dikompilasi diletakkan di direktori / target / . Itulah mengapa kali ini, kami mendapatkan jalur ke resource classpath.

5. Kesimpulan

Singkatnya, dalam tutorial singkat ini kita telah membahas cara membaca direktori / src / test / resources di JUnit 5.

Bergantung pada kebutuhan kita, kita dapat mencapai tujuan kita dengan beberapa metode: dengan menggunakan kelas File , Paths , atau ClassLoader .

Seperti biasa, Anda dapat menemukan semua contoh kami di proyek GitHub kami!