Verkrijg het pad van de / src / test / resources-directory in JUnit

1. Overzicht

Soms moeten we tijdens het testen van eenheden een bestand van het klassenpad lezen of een bestand doorgeven aan een te testen object. Of we hebben mogelijk een bestand in src / test / resources met gegevens voor stubs die kunnen worden gebruikt door bibliotheken zoals WireMock.

In deze tutorial we laten zien hoe je het pad van de / src / test / resources directory.

2. Maven afhankelijkheden

Eerst moeten we JUnit 5 toevoegen aan onze Maven-afhankelijkheden:

 org.junit.jupiter junit-jupiter-engine 5.4.2 

We kunnen de nieuwste versie van JUnit 5 vinden op Maven Central.

2. Met behulp van java.io.File

De eenvoudigste benadering maakt gebruik van een exemplaar van de java.io.File klasse om de / src / test / resources directory, door het getAbsolutePath () methode:

String path = "src / test / resources"; Bestandsbestand = nieuw bestand (pad); String absolutePath = file.getAbsolutePath (); System.out.println (absolutePath); assertTrue (absolutePath.endsWith ("src / test / resources"));

Let daar op dit pad is relatief ten opzichte van de huidige werkdirectory, wat betekent dat de projectdirectory.

Laten we een voorbeelduitvoer bekijken bij het uitvoeren van de test op macOS:

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

3. Met behulp van Pad

Vervolgens kunnen we de Pad class, die werd geïntroduceerd in Java 7.

Eerst moeten we een statische fabrieksmethode aanroepen - Paths.get (). Dan zullen we converteren Pad naar Het dossier. Uiteindelijk hoeven we alleen maar te bellen getAbsolutePath (), zoals in het vorige voorbeeld:

Pad resourceDirectory = Paths.get ("src", "test", "resources"); String absolutePath = resourceDirectory.toFile (). GetAbsolutePath (); System.out.println (absolutePath); Assert.assertTrue (absolutePath.endsWith ("src / test / resources")); 

En we zouden dezelfde uitvoer krijgen als in het vorige voorbeeld:

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

4. Met behulp van ClassLoader

Ten slotte kunnen we ook een ClassLoader:

String resourceName = "example_resource.txt"; ClassLoader classLoader = getClass (). GetClassLoader (); Bestandsbestand = nieuw bestand (classLoader.getResource (resourceName) .getFile ()); String absolutePath = file.getAbsolutePath (); System.out.println (absolutePath); assertTrue (absolutePath.endsWith ("/ example_resource.txt")); 

En laten we eens kijken naar de uitvoer:

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

Merk op dat we deze keer een /junit-5-configuration/target/test-classes/example @CC.txt het dossier. Het verschilt wanneer we het resultaat vergelijken met de vorige methoden.

Dit is zo omdat de ClassLoader zoekt naar de bronnen op het klassenpad. In Maven worden de gecompileerde klassen en bronnen in de /doelwit/ directory. Daarom hebben we deze keer een pad naar een classpath-resource.

5. Conclusie

Samenvattend, in deze korte tutorial hebben we besproken hoe je een / src / test / resources directory in JUnit 5.

Afhankelijk van onze behoeften kunnen we ons doel op meerdere manieren bereiken: door gebruik te maken van het dossier, Paden, of ClassLoader klassen.

Zoals altijd kun je al onze voorbeelden vinden op ons GitHub-project!