Obtenez le chemin du répertoire / src / test / resources dans JUnit

1. Vue d'ensemble

Parfois, pendant les tests unitaires, nous pouvons avoir besoin de lire un fichier à partir du chemin de classe ou de transmettre un fichier à un objet en cours de test. Ou, nous pouvons avoir un fichier dans src / test / resources avec des données pour les stubs qui pourraient être utilisés par des bibliothèques comme WireMock.

Dans ce didacticiel, nous montrerons comment lire le chemin du répertoire / src / test / resources .

2. Dépendances de Maven

Tout d'abord, nous devrons ajouter JUnit 5 à nos dépendances Maven:

 org.junit.jupiter junit-jupiter-engine 5.4.2 

Nous pouvons trouver la dernière version de JUnit 5 sur Maven Central.

2. Utilisation de java.io.File

L'approche la plus simple utilise une instance de la classe java.io.File pour lire le répertoire / src / test / resources , en appelant la méthode getAbsolutePath () :

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

Notez que ce chemin est relatif au répertoire de travail actuel , c'est-à-dire au répertoire du projet.

Voyons un exemple de sortie lors de l'exécution du test sur macOS:

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

3. Utilisation du chemin

Ensuite, nous pouvons utiliser la classe Path , qui a été introduite dans Java 7 .

Tout d'abord, nous devons appeler une méthode de fabrique statique - Paths.get (). Ensuite, nous convertirons le chemin en fichier. Au final, il suffit d'appeler getAbsolutePath () , comme dans l'exemple précédent:

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

Et, nous obtiendrions le même résultat que dans l'exemple précédent:

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

4. Utilisation de ClassLoader

Enfin, nous pouvons également utiliser un 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")); 

Et, jetons un œil à la sortie:

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

Notez que cette fois, nous avons un fichier /junit-5-configuration/target/test-classes/example-resource.txt . Cela diffère lorsque nous comparons le résultat aux méthodes précédentes.

Cela est dû au fait que le ClassLoader recherche les ressources sur le chemin de classe . Dans Maven, les classes et ressources compilées sont placées dans le répertoire / target / . C'est pourquoi cette fois, nous avons un chemin vers une ressource classpath.

5. Conclusion

Pour résumer, dans ce tutoriel rapide, nous avons expliqué comment lire un répertoire / src / test / resources dans JUnit 5.

En fonction de nos besoins, nous pouvons atteindre notre objectif avec plusieurs méthodes: en utilisant les classes File , Paths ou ClassLoader .

Comme toujours, vous pouvez retrouver tous nos exemples sur notre projet GitHub!