Java >> Java tutorial >  >> Tag >> JUnit

Hent stien til /src/test/resources-kataloget i JUnit

1. Oversigt

Nogle gange skal vi under enhedstestning muligvis læse en fil fra klassestien eller sende en fil til et objekt, der testes. Vi har muligvis også en fil i src/test/resources med data til stubber, der kunne bruges af biblioteker som WireMock.

I dette selvstudie lærer vi, hvordan du læser stien til /src/test/resources mappe .

2. Maven afhængigheder

Først skal vi tilføje JUnit 5 til vores Maven-afhængigheder:

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

Vi kan finde den seneste version af JUnit 5 på Maven Central.

2. Brug af java.io.File

Den enkleste fremgangsmåde bruger en forekomst af java.io.File klasse for at læse /src/test/resources  bibliotek ved at kalde getAbsolutePath() metode:

String path = "src/test/resources";

File file = new File(path);
String absolutePath = file.getAbsolutePath();

System.out.println(absolutePath);

assertTrue(absolutePath.endsWith("src/test/resources"));

Bemærk, at denne sti er i forhold til den aktuelle arbejdsmappe , hvilket betyder projektbiblioteket.

Lad os se på et eksempel på output, når du kører testen på macOS:

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

3. Brug af sti

Dernæst kan vi bruge stien klasse, som blev introduceret i Java 7 .

Først skal vi kalde en statisk fabriksmetode, Paths.get(). Derefter konverterer vi sti  til Fil. Til sidst skal vi bare kalde getAbsolutePath() , som i det foregående eksempel:

Path resourceDirectory = Paths.get("src","test","resources");
String absolutePath = resourceDirectory.toFile().getAbsolutePath();

System.out.println(absolutePath);
 
Assert.assertTrue(absolutePath.endsWith("src/test/resources"));

Og vi får det samme output som i det foregående eksempel:

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

4. Brug af ClassLoader

Endelig kan vi også bruge en 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"));

Lad os se på outputtet:

/Users/user.name/my_projects/tutorials/testing-modules/junit-5-configuration/target/test-classes/example_resource.txt

Bemærk, at vi denne gang har en /junit-5-configuration/target/test-classes/example-resource.txt fil. Det adskiller sig, når vi sammenligner resultatet med de tidligere metoder.

Dette er fordi ClassLoader leder efter ressourcerne på klassestien . I Maven placeres de kompilerede klasser og ressourcer i /target/  vejviser. Det er derfor, vi denne gang fik en sti til en klassesti-ressource.

5. Konklusion

I denne korte artikel diskuterede vi, hvordan man læser en /src/test/resources  bibliotek i JUnit 5.

Afhængigt af vores behov kan vi nå vores mål med flere metoder:Fil , stier , eller ClassLoader  klasser.

Som altid er alle eksemplerne tilgængelige på vores GitHub-projekt!


Java tag