Ottieni il percorso della directory / src / test / resources in JUnit

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!