Rufen Sie den Pfad des Verzeichnisses / src / test / resources in JUnit ab

1. Übersicht

Manchmal müssen wir während des Komponententests eine Datei aus dem Klassenpfad lesen oder eine Datei an ein zu testendes Objekt übergeben. Oder wir haben eine Datei in src / test / resources mit Daten für Stubs, die von Bibliotheken wie WireMock verwendet werden können.

In diesem Tutorial zeigen wir, wie der Pfad des Verzeichnisses / src / test / resources gelesen wird .

2. Maven-Abhängigkeiten

Zuerst müssen wir JUnit 5 zu unseren Maven-Abhängigkeiten hinzufügen:

 org.junit.jupiter junit-jupiter-engine 5.4.2 

Wir können die neueste Version von JUnit 5 auf Maven Central finden.

2. Verwenden von java.io.File

Der einfachste Ansatz verwendet eine Instanz der Klasse java.io.File , um das Verzeichnis / src / test / resources zu lesen , indem die Methode getAbsolutePath () aufgerufen wird:

String path = "src/test/resources"; File file = new File(path); String absolutePath = file.getAbsolutePath(); System.out.println(absolutePath); assertTrue(absolutePath.endsWith("src/test/resources"));

Beachten Sie, dass dieser Pfad relativ zum aktuellen Arbeitsverzeichnis ist , dh zum Projektverzeichnis.

Sehen wir uns eine Beispielausgabe an, wenn Sie den Test unter macOS ausführen:

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

3. Pfad verwenden

Als nächstes können wir die Path- Klasse verwenden, die in Java 7 eingeführt wurde .

Zuerst müssen wir eine statische Factory-Methode aufrufen - Paths.get (). Dann konvertieren wir den Pfad in eine Datei. Am Ende müssen wir nur getAbsolutePath () aufrufen , wie im vorherigen Beispiel:

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

Und wir würden die gleiche Ausgabe wie im vorherigen Beispiel erhalten:

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

4. Verwenden von ClassLoader

Schließlich können wir auch einen ClassLoader verwenden :

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")); 

Und schauen wir uns die Ausgabe an:

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

Beachten Sie, dass wir diesmal eine Datei /junit-5-configuration/target/test-classes/example-resource.txt haben . Es unterscheidet sich, wenn wir das Ergebnis mit den vorherigen Methoden vergleichen.

Dies liegt daran, dass der ClassLoader nach den Ressourcen im Klassenpfad sucht . In Maven werden die kompilierten Klassen und Ressourcen im Verzeichnis / target / abgelegt . Aus diesem Grund haben wir dieses Mal einen Pfad zu einer Klassenpfadressource erhalten.

5. Schlussfolgerung

Zusammenfassend haben wir in diesem kurzen Tutorial erläutert, wie ein Verzeichnis / src / test / resources in JUnit 5 gelesen wird .

Je nach unseren Bedürfnissen, können wir unser Ziel mit mehreren Methoden erreicht werden : durch die Verwendung Datei , Pfade oder Classloader - Klassen.

Wie immer finden Sie alle unsere Beispiele in unserem GitHub-Projekt!