Ressourcendateien, die nicht in JUnit-Testfällen gefunden wurden
Zusammenfassung
Meine JUnit-tests sind nicht zu finden, die Dateien, die Sie benötigen, während der Ausführung.
Ich bin mit Maven für das dependency management und Zusammenstellung.
Details
Alle benötigten Dateien der test-Fälle befinden sich in: src/test/resources
.
Beispielsweise src/test/resources/resourceFile.txt
.
Zugriff auf eine Ressource, die ich den folgenden code verwenden:
URL url = getClass().getResource("/resourceFile.txt").getFile();
File file = new File(url);
Aber dann file.exists()
zurück false
. Und der Fehler den ich bekomme, ist:
Tests in error:
myJUnitTestCase(tests.MyJUnitTestClass): /home/me/workspace/Project%20Name/target/test-classes/resourceFile.txt (No such file or directory)
Beachten Sie, dass die folgenden gibt die gleiche Fehlermeldung (beachten Sie die entfernt /
Präfix):
URL url = getClass().getClassLoader().getResource("resourceFile.txt").getFile();
File file = new File(url);
Scheint es, als ob die Dateien aus src/test/resources
sind nicht immer kopiert, in target/test-classes
.
Irgendwelche Ideen?
Die folgenden Fragen nicht helfen
Warum Kann ich nicht zugreifen src/test/resources in Junit-test-run mit Maven?
Laden Der Properties-Datei In JUnit @BeforeClass
Der Umgang mit Testdaten in Junit?
Software-Versionen
Ubuntu 12.04
Apache-Maven-2.2.1
Java-1.7.0
Eclipse (Java EE IDE for Web Developers) Indigo Service Release 2
(abgeschnitten) 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>
InformationsquelleAutor der Frage Alex Averbuch | 2012-05-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mein Fehler, die Ressource-Dateien WURDEN tatsächlich kopiert
target/test-classes
. Das problem schien zu sein, da Leerzeichen in meinem Projekt namez.B.Project%20Name
.Ich bin nun laden Sie die Datei wie folgt und es funktioniert:
Oder, (aus Java: wie man eine Datei aus Escapezeichen URL?), kann es besser sein (keine Abhängigkeit von Apache Commons):
InformationsquelleAutor der Antwort Alex Averbuch
Wissen Sie, dass Maven basiert auf der Konvention über Konfiguration pardigm? so sollten Sie nicht konfigurieren Sie Dinge, die Standard sind.
All das Zeug stellt den Standard in Maven. Also best practice ist, nicht definieren, es ist bereits getan.
InformationsquelleAutor der Antwort khmarbaise
Dies ist eigentlich überflüssig, außer in Fällen, wo Sie wollen, um die Standardwerte zu überschreiben. Alle diese Einstellungen sind implizite Standardwerte.
Können Sie überprüfen, indem Sie Ihre effektive POM mit diesem Befehl
mvn help:effective-pom
Zum Beispiel, wenn ich will, auf einen anderen test-Ressource-Pfad oder der resource-Pfad, den Sie sollten diese Option verwenden, sonst nicht.
InformationsquelleAutor der Antwort Josh Uzo