1. 概要

単体テスト中に、クラスパスからファイルを読み取ったり、テスト対象のオブジェクトにファイルを渡したりする必要がある場合があります。 または、 src / test / resources に、WireMockなどのライブラリで使用できるスタブのデータを含むファイルがある場合があります。

このチュートリアルでは、 / src / test/resourcesディレクトリのパスを読み取る方法を示します。

2. Mavenの依存関係

まず、Mavenの依存関係にJUnit5を追加する必要があります。

<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.8.1</version>
</dependency>

JUnit 5の最新バージョンは、 MavenCentralにあります。

2. java.io.Fileを使用する

最も単純なアプローチでは、java.io.Fileクラスのインスタンスを使用して、 getAbsolutePath()メソッドを呼び出して / src / test /resourcesディレクトリを読み取ります。 :

String path = "src/test/resources";

File file = new File(path);
String absolutePath = file.getAbsolutePath();

System.out.println(absolutePath);

assertTrue(absolutePath.endsWith("src/test/resources"));

このパスは、現在の作業ディレクトリ、つまりプロジェクトディレクトリからの相対パスであることに注意してください。

macOSでテストを実行したときの出力例を見てみましょう。

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

3. パスを使用する

次に、Java7で導入されたPathクラスを使用できます。.

まず、静的ファクトリメソッド Paths.get()。を呼び出す必要があります。次に、 PathFileに変換します。最後に、前の例のように、 getAbsolutePath()を呼び出す必要があります。

Path resourceDirectory = Paths.get("src","test","resources");
String absolutePath = resourceDirectory.toFile().getAbsolutePath();

System.out.println(absolutePath);
 
Assert.assertTrue(absolutePath.endsWith("src/test/resources"));

そして、前の例と同じ出力が得られます。

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

4. ClassLoaderを使用する

最後に、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"));

そして、出力を見てみましょう:

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

今回は、/junit-5-configuration/target/test-classes/example-resource.txtファイルがあることに注意してください。 結果を以前の方法と比較すると異なります。

これは、ClassLoaderがクラスパス上のリソースを検索するためです。 Mavenでは、コンパイルされたクラスとリソースは / target/ディレクトリに配置されます。 そのため、今回はクラスパスリソースへのパスを取得しました。

5. 結論

要約すると、このクイックチュートリアルでは、JUnit5の/ src / test /resourcesディレクトリを読み取る方法について説明しました。

ニーズに応じて、 File Paths 、または ClassLoader クラスを使用するなど、複数の方法で目標を達成できます。

いつものように、私たちのすべての例は私たちのGitHubプロジェクトで見つけることができます!