1. Panoramica
A volte durante i test unitari, potrebbe essere necessario leggere un file dal classpath o passare un file a un oggetto in prova. Oppure, potremmo avere un file in src / test / resources con dati per stub che potrebbero essere usati da librerie come WireMock.
In questo tutorial, mostreremo come leggere il percorso della directory / src / test / resources .
2. Dipendenze di Maven
Innanzitutto, dovremo aggiungere JUnit 5 alle nostre dipendenze Maven:
org.junit.jupiter junit-jupiter-engine 5.4.2
Possiamo trovare l'ultima versione di JUnit 5 su Maven Central.
2. Utilizzo di java.io.File
L'approccio più semplice utilizza un'istanza della classe java.io.File per leggere la directory / src / test / resources , chiamando il metodo 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"));
Notare che questo percorso è relativo alla directory di lavoro corrente , ovvero la directory del progetto.
Vediamo un output di esempio durante l'esecuzione del test su macOS:
/Users/user.name/my_projects/tutorials/testing-modules/junit-5-configuration/src/test/resources
3. Utilizzo del percorso
Successivamente, possiamo usare la classe Path , che è stata introdotta in Java 7 .
Per prima cosa, dobbiamo chiamare un metodo factory statico - Paths.get (). Quindi, convertiremo Path to File. Alla fine, dobbiamo solo chiamare getAbsolutePath () , come nell'esempio precedente:
Path resourceDirectory = Paths.get("src","test","resources"); String absolutePath = resourceDirectory.toFile().getAbsolutePath(); System.out.println(absolutePath); Assert.assertTrue(absolutePath.endsWith("src/test/resources"));
E avremmo lo stesso output dell'esempio precedente:
/Users/user.name/my_projects/tutorials/testing-modules/junit-5-configuration/src/test/resources
4. Utilizzo di ClassLoader
Infine, possiamo anche usare 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"));
E diamo un'occhiata all'output:
/Users/user.name/my_projects/tutorials/testing-modules/junit-5-configuration/target/test-classes/example_resource.txt
Nota che questa volta abbiamo un file /junit-5-configuration/target/test-classes/example-resource.txt . È diverso quando confrontiamo il risultato con i metodi precedenti.
Questo perché il ClassLoader cerca le risorse sul classpath . In Maven, le classi e le risorse compilate vengono inserite nella directory / target / . Ecco perché questa volta abbiamo ottenuto un percorso per una risorsa del percorso di classe.
5. conclusione
Per riassumere, in questo breve tutorial abbiamo discusso su come leggere una directory / src / test / resources in JUnit 5.
A seconda delle nostre esigenze, possiamo raggiungere il nostro obiettivo con più metodi: utilizzando le classi File , Paths o ClassLoader .
Come sempre, puoi trovare tutti i nostri esempi nel nostro progetto GitHub!