SommarioRisorsa non file trovati dai casi di test JUnit
miei test JUnit non trovano i file di cui hanno bisogno durante l'esecuzione. Sto usando Maven per la gestione delle dipendenze e la compilazione.
Dettagli
Tutti i file richiesti dai casi di test si trovano in: src/test/resources
.
Ad esempio, src/test/resources/resourceFile.txt
.
Per accedere a una risorsa che uso il seguente codice:
URL url = getClass().getResource("/resourceFile.txt").getFile();
File file = new File(url);
Ma poi ritorna file.exists()
false
. E l'errore che ottengo è:
Tests in error:
myJUnitTestCase(tests.MyJUnitTestClass): /home/me/workspace/Project%20Name/target/test-classes/resourceFile.txt (No such file or directory)
nota, il seguente dà lo stesso errore (notare il rimosso /
prefisso):
URL url = getClass().getClassLoader().getResource("resourceFile.txt").getFile();
File file = new File(url);
Sembra come se i file da src/test/resources
non sono sempre copiati in target/test-classes
.
Qualche idea?
Le seguenti domande non ha aiutato
Why Can't I access src/test/resources in Junit test run with Maven?
Loading Properties File In JUnit @BeforeClass
How to deal with the test data in Junit?
Versioni software
Ubun tu 12.04
Apache Maven 2.2.1
Java 1.7.0
Eclipse (Java EE IDE per gli sviluppatori web) Servizio Indigo di uscita 2
(troncato) Maven POM
<?xml version="1.0" encoding="UTF-8"?>
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.groupId</groupId>
<artifactId>artifactId</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>name</name>
<build>
<finalName>name</finalName>
<directory>target</directory>
<outputDirectory>target/classes</outputDirectory>
<testOutputDirectory>target/test-classes</testOutputDirectory>
<sourceDirectory>src/main/java</sourceDirectory>
<testSourceDirectory>src/test/java</testSourceDirectory>
<resources>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
<testResources>
<testResource>
<directory>src/test/resources</directory>
</testResource>
</testResources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
'Sembra che i file di src/test/risorse non vengano copiati nelle classi target/test 'Lo hai effettivamente verificato? – ftr
No, sono un idiota ... mi dispiace. Ho appena controllato e posso confermare che sono stati effettivamente copiati lì. Forse è dovuto al "% 20" nel percorso? –
Stai provando ad aprire un flusso di input da quel file? In tal caso, è possibile utilizzare direttamente quanto segue per eseguire questa operazione (anziché utilizzare l'URL): .class.getClassLoader(). GetResourceAsStream (fileName) –