JUnitの/ src / test / resourcesディレクトリのパスを取得します

  • link:/category/testing/ [テスト]

  • JUnit

1. 概要

ユニットテスト中に、クラスパスからファイルを読み取るか、テスト中のオブジェクトにファイルを渡す必要がある場合があります。 または、https://www.baeldung.com/introduction-to-wiremock [WireMock]などのライブラリで使用できるスタブのデータを含む_src / test / resources_にファイルがある場合があります。
このチュートリアルでは、* _ / src / test / resources_ディレクトリのパスを読み取る方法を示します*。

2. Mavenの依存関係

まず、Mavenの依存関係にJUnit 5を追加する必要があります。
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.4.2</version>
</dependency>
JUnit 5の最新バージョンは、https://search.maven.org/search?q = g:org.junit.jupiter%20AND%20a:junit-jupiter-engine [Maven Central]で見つけることができます。

2. _java.io.File_の使用

*最も簡単なアプローチは、_getAbsolutePath()_メソッドを呼び出すことにより、_java.io.File_クラスのインスタンスを使用して__ / src / test / resources __directoryを読み取ります。
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. _Path_の使用

**次に、Java 7で導入された_Path_クラスを使用できます** __ *。* __
最初に、静的ファクトリメソッド_ _Paths.get()._を呼び出す必要があります。次に、__ Path __を_File._に変換します。最後に、前の例のように、_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 / __directoryに配置されます。 そのため、今回はクラスパスリソースへのパスを取得しました。

5. 結論

要約すると、このクイックチュートリアルでは、JUnit 5で___ src / test / resources __directoryを読み取る方法について説明しました。
ニーズに応じて、_File _、_ Paths_、または__ClassLoader __classesを使用して、複数のメソッドで目標を達成できます。
いつものように、https://github.com/eugenp/tutorials/tree/master/testing-modules/junit-5-basics [our GitHub project]ですべてのサンプルを見つけることができます!