Перейти к основному содержимому

Получите путь к каталогу /src/test/resources в JUnit

· 2 мин. чтения

1. Обзор

Иногда во время модульного тестирования нам может потребоваться прочитать какой-либо файл из пути к классам или передать файл тестируемому объекту. Или у нас может быть файл в src/test/resources с данными для заглушек, которые могут использоваться такими библиотеками, как WireMock .

В этом руководстве мы покажем, как прочитать путь к каталогу / src/test/resources .

2. Зависимости Maven

Во-первых, нам нужно добавить JUnit 5 к нашим зависимостям Maven:

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

Мы можем найти последнюю версию JUnit 5 на Maven Central .

2. Использование java.io.File

Самый простой подход использует экземпляр класса java.io.File для чтения каталога /src/test/resources путем вызова метода 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"));

Обратите внимание, что этот путь относится к текущему рабочему каталогу , то есть к каталогу проекта.

Давайте посмотрим на пример вывода при запуске теста на macOS:

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

3. Использование пути

Далее мы можем использовать класс Path , представленный в Java 7 .

Во-первых, нам нужно вызвать статический фабричный метод — 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/ . Вот почему на этот раз у нас есть путь к ресурсу пути к классам.

5. Вывод

Подводя итог, в этом кратком руководстве мы обсудили, как читать каталог /src/test/resources в JUnit 5.

В зависимости от наших потребностей мы можем достичь нашей цели несколькими способами: используя классы File , Paths или ClassLoader .

Как всегда, вы можете найти все наши примеры на нашем проекте GitHub !