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 !