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!