Obtenha o caminho do diretório/src/test/resources na JUnit

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!