Obtenha o caminho do diretório / src / test / resources na JUnit
1. Visão geral
Às vezes, durante o teste de unidade, talvez seja necessário ler algum arquivo do caminho de classe ou passar um arquivo para um objeto em teste. Ou podemos ter um arquivo emsrc/test/resources com dados para stubs que podem ser usados por bibliotecas comoWireMock.
Neste tutorial,we’ll show how to read the path of the /src/test/resources directory.
2. Dependências do Maven
Primeiro, precisamos adicionar JUnit 5 às nossas dependências Maven:
org.junit.jupiter
junit-jupiter-engine
5.4.2
Podemos encontrar a versão mais recente do JUnit 5 emMaven Central.
2. Usandojava.io.File
The simplest approach uses an instance of the java.io.File class para ler o/src/test/resources diretório, chamando o métodogetAbsolutePath():
String path = "src/test/resources";
File file = new File(path);
String absolutePath = file.getAbsolutePath();
System.out.println(absolutePath);
assertTrue(absolutePath.endsWith("src/test/resources"));
Observe quethis path is relative to the current working directory, significando o diretório do projeto.
Vamos ver um exemplo de saída ao executar o teste no macOS:
/Users/user.name/my_projects/tutorials/testing-modules/junit-5-configuration/src/test/resources
3. UsandoPath
A seguir, podemos usar a classePath, que foi introduzida no Java 7 .
Primeiro, precisamos chamar um método de fábrica estático -Paths.get(). Então, vamos converterPath toFile. No final, só precisamos chamargetAbsolutePath(), como no exemplo anterior:
Path resourceDirectory = Paths.get("src","test","resources");
String absolutePath = resourceDirectory.toFile().getAbsolutePath();
System.out.println(absolutePath);
Assert.assertTrue(absolutePath.endsWith("src/test/resources"));
E obteríamos a mesma saída do exemplo anterior:
/Users/user.name/my_projects/tutorials/testing-modules/junit-5-configuration/src/test/resources
4. UsandoClassLoader
Finalmente, também podemos usar umClassLoader:
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"));
E, vamos dar uma olhada na saída:
/Users/user.name/my_projects/tutorials/testing-modules/junit-5-configuration/target/test-classes/example_resource.txt
Observe que, desta vez, temos um arquivo/junit-5-configuration/target/test-classes/example-resource.txt. Difere quando comparamos o resultado com os métodos anteriores.
Isso ocorre porquethe ClassLoader looks for the resources on the classpath. No Maven, as classes e recursos compilados são colocados no diretório/target/ . É por isso que, desta vez, temos um caminho para um recurso de caminho de classe.
5. Conclusão
Para resumir, neste tutorial rápido, discutimos como ler um/src/test/resources diretório no JUnit 5.
Dependendo de nossas necessidades, podemos atingir nosso objetivo com vários métodos: usandoFile,Paths ouClassLoader classes.
Como sempre, você pode encontrar todos os nossos exemplos emour GitHub project!