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!