Es gibt Unterschiede und Einschränkungen bei den von @Steve C und @ ashosborne1 angebotenen Optionen. Sie müssen spezifiziert werden, glaube ich.
Wann können wir verwenden : File resourcesDirectory = new File("src/test/resources");
?
- 1 Wenn Tests nur über Maven, nicht aber über IDE ausgeführt werden sollen.
- 2.1 Wenn Tests über maven oder ausgeführt werden sollen
- 2.2 über IDE und nur ein Projekt wird in IDE importiert. (Ich verwende den Begriff "importiert", da er in IntelliJ IDEA verwendet wird. Ich denke, Benutzer von Eclipse importieren auch ihr Maven-Projekt.) Dies funktioniert, da das Arbeitsverzeichnis beim Ausführen von Tests über IDE mit Ihrem Projekt identisch ist.
- 3.1 Wenn Tests über maven oder ausgeführt werden sollen
- 3.2 über IDE, und mehr als ein Vorhaben in IDE importiert (wenn Sie kein Student sind, in der Regel Sie mehrere Projekte importieren), und bevor Sie Tests über IDE ausführen, können Sie manuell konfigurieren für Ihre Tests Arbeitsverzeichnis. Dieses Arbeitsverzeichnis sollte sich auf Ihr importiertes Projekt beziehen, das die Tests enthält. Standardmäßig ist das Arbeitsverzeichnis aller in IDE importierten Projekte nur eines. Wahrscheinlich ist es nur eine Einschränkung
IntelliJ IDEA
, aber ich denke, alle IDEs funktionieren so. Und diese Konfiguration, die manuell vorgenommen werden muss, ist überhaupt nicht gut. Wenn wir mit mehreren Tests arbeiten, die in verschiedenen Maven-Projekten vorhanden sind, aber in ein großes „IDE“ -Projekt importiert wurden, müssen wir uns daran erinnern und dürfen uns nicht entspannen und Freude an Ihrer Arbeit haben.
Die von @ ashosborne1 angebotene Lösung (ich persönlich bevorzuge diese) erfordert zwei zusätzliche Anforderungen, die erfüllt sein müssen, bevor Sie Tests ausführen. Hier ist eine Liste der Schritte zur Verwendung dieser Lösung:
Erstellen Sie einen Testordner ("teva") und eine Datei ("readme") in "src / test / resources /":
src / test / resources / teva / readme
Die Datei muss im Testordner erstellt werden, sonst funktioniert sie nicht. Maven ignoriert leere Ordner.
- Mindestens einmal Projekt über erstellen
mvn clean install
. Es werden auch Tests ausgeführt. Es kann ausreichen, nur Ihre Testklasse / -methode über maven auszuführen, ohne ein ganzes Projekt zu erstellen. Als Ergebnis werden Ihre Testressourcen in Testklassen kopiert. Hier ist ein Pfad:target/test-classes/teva/readme
- Danach können Sie mit Code, der bereits von @ ashosborne1 angeboten wird, auf den Ordner zugreifen (es tut mir leid, dass ich diesen Code in dieser Liste der Elemente nicht korrekt bearbeiten konnte):
public static final String TEVA_FOLDER = "teva"; ...
URL tevaUrl = YourTest.class.getClassLoader().getResource(TEVA_FOLDER);
String tevaTestFolder = new File(tevaUrl.toURI()).getAbsolutePath();
Jetzt können Sie Ihren Test so oft über IDE ausführen, wie Sie möchten. Bis Sie mvn sauber laufen. Der Zielordner wird gelöscht.
Das Erstellen einer Datei in einem Testordner und das erstmalige Ausführen von maven, bevor Sie Tests über IDE ausführen, sind erforderliche Schritte. Wenn Sie ohne diese Schritte nur in Ihrer IDE Testressourcen erstellen, dann Test schreiben und nur über IDE ausführen, wird eine Fehlermeldung angezeigt. Durch Ausführen von Tests über mvn werden Testressourcen in target / test-classes / teva / readme kopiert und für einen Klassenladeprogramm zugänglich.
Sie fragen sich vielleicht, warum ich mehr als ein Maven-Projekt in IDE importieren muss und warum so viele komplizierte Dinge? Für mich eine der Hauptmotivationen: IDA-bezogene Dateien von Code fernzuhalten. Ich erstelle zuerst ein neues Projekt in meiner IDE. Es ist ein gefälschtes Projekt, das nur Inhaber von IDE-bezogenen Dateien ist. Dann importiere ich bereits vorhandene Maven-Projekte. Ich zwinge diese importierten Projekte, IDEA-Dateien nur in meinem ursprünglichen gefälschten Projekt zu behalten. Infolgedessen werden im Code keine IDE-bezogenen Dateien angezeigt. SVN sollte sie nicht sehen (bitte nicht anbieten, svn / git so zu konfigurieren, dass solche Dateien ignoriert werden). Auch ist es einfach sehr praktisch.