Ich habe einige Junit-Unit-Tests, für deren Ausführung viel Heap-Speicherplatz erforderlich ist - dh 1G. (Sie testen speicherintensive Funktionen für eine Webstart-App, die nur mit ausreichend Heap-Speicherplatz ausgeführt wird und intern auf Win 7 64-Bit-Computern ausgeführt wird. Daher ist eine Neugestaltung der Tests kein praktischer Vorschlag.)
Ich entwickle in Intellij IDEA, daher weiß ich, dass ich die JVM-Parameter (z. B. -Xmx1024M) für die Testklasse festlegen kann. Dies gilt jedoch nur für die Ausführung der gesamten Testklasse. Wenn ich einen einzelnen Test ausführen möchte, muss ich die Ausführungskonfigurationen für diese Testmethode neu erstellen.
Diese sind auch IDE- und Box-spezifisch. Wenn ich also die Box wechsle (ich entwickle auf mehreren Computern) oder einer meiner Kollegen versucht, die Tests auszuführen, werden diese Einstellungen nicht übertragen. (Auch andere IDEs wie Eclipse und NetBeans werden von meinen Kollegen verwendet.) FWIW, wir verwenden Quecksilber für die Quellcodeverwaltung.
Für den Erstellungszyklus verwenden wir Maven, daher weiß ich, wie die JVM-Parameter dafür angegeben werden.
Also: - Ich suche nach einer Möglichkeit, die JVM-Parameter anzugeben, die für die gesamte Testklasse und die einzelnen Testmethoden gelten. und - ich möchte diese Spezifikation für alle IDEs auf jedem Computer freigeben (nachdem ich den Code aus dem Repository abgerufen habe).
quelle
Antworten:
In IntelliJ können Sie Standardeinstellungen für jede Laufkonfiguration festlegen. In Run / Debug - Konfigurationsdialog (die Sie pro Test zu konfigurieren Heap verwenden) Klicken Sie auf Standardwerte und JUnit . Diese Einstellungen werden automatisch auf jede neue JUnit-Testkonfiguration angewendet. Ich denke, eine ähnliche Einstellung gibt es für Eclipse.
Es gibt jedoch keine einfache Möglichkeit, solche Einstellungen (zumindest in IntelliJ) über Umgebungen hinweg zu übertragen. Sie können IntelliJ-Projektdateien in Ihr Repository übertragen: Es funktioniert möglicherweise, aber ich empfehle es nicht.
Sie wissen, wie Sie diese einstellen
maven-surefire-plugin
. Gut. Dies ist der portabelste Weg (siehe Ptomlis Antwort für ein Beispiel).Im Übrigen müssen Sie bedenken, dass JUnit-Testfälle nur eine Reihe von Java-Klassen sind und kein eigenständiges Programm. Es ist Sache des Läufers (es sei ein eigenständiger JUnit-Läufer, Ihre IDE,
maven-surefire-plugin
diese Optionen festzulegen. Es gibt jedoch keine "tragbare" Möglichkeit, sie festzulegen, sodass die Speichereinstellungen unabhängig vom Läufer angewendet werden.Um Ihnen ein Beispiel zu geben: Sie können
Xmx
bei der Entwicklung eines Servlets keine Parameter definieren - es liegt am Container, dies zu definieren. Sie können nicht sagen: "Dieses Servlet sollte immer mit ausgeführt werdenXmx=1G
.quelle
In Maven können Sie das todsichere Plugin konfigurieren
Wenn Sie Maven für Builds verwenden, wird diese Konfiguration im Quellbaum übernommen und bei der Durchführung von Tests angewendet. Siehe die Dokumentation zum Maven Surefire Plugin .
quelle
-Xmx256M
diese an die Java-Befehlszeile übergeben, wenn Sie Ihre Komponententests direkt von IntelliJ aus ausführen. Das hat mich nur verwirrt :-(Parameter können auch im laufenden Betrieb eingestellt werden.
Siehe http://www.cowtowncoder.com/blog/archives/2010/04/entry_385.html
quelle
Laut dieser Support-Frage https://intellij-support.jetbrains.com/hc/en-us/community/posts/206165789-JUnit-default-heap-size-overridden-
Das Argument -Xmx für einen IntelliJ-Junit-Testlauf stammt vom Maven-Surefire-Plugin, sofern es festgelegt ist.
Dieses pom.xml-Snippet
scheint das Argument -Xmx1024 mit IntelliJ 2016.2.4 an den Junit-Testlauf zu übergeben.
quelle
Ich stimme den anderen zu, die sagten, dass es keinen einfachen Weg gibt, diese Einstellungen zu verteilen.
Für Eclipse: Bitten Sie Ihre Kollegen, Folgendes festzulegen:
-Xmx1024m
Danach werden alle Tests mit ausgeführt,
-Xmx1024m
aber leider haben Sie sie in jeder Eclipse-Installation festgelegt. Vielleicht könnten Sie ein benutzerdefiniertes Eclipse-Paket erstellen, das diese Einstellung enthält, und es Ihren Mitarbeitern geben.Der folgende Arbeitsprozess kann ebenfalls hilfreich sein: Wenn die IDE keinen Test ausführen kann, sollte der Entwickler prüfen, ob Maven diesen Test ausführen kann oder nicht.
quelle
Sie können systemPropertyVariables verwenden (java.protocol.handler.pkgs ist Ihr JVM-Argumentname):
http://maven.apache.org/surefire/maven-surefire-plugin/examples/system-properties.html
quelle
Eine Eclipse-spezifische Alternative, die auf den JVM-Parameter java.library.path beschränkt ist, ermöglicht das Festlegen für einen bestimmten Quellordner und nicht für das gesamte JDK, wie in einer anderen Antwort vorgeschlagen:
Für diejenigen, die sich für Details darüber interessieren, warum das Maven-Argline-Tag dem SystemProperties-Tag vorgezogen werden sollte, schauen Sie zum Beispiel:
Nimm native JNI-Dateien im Maven-Test auf (lwjgl)
quelle
Wenn Sie es in Java-Code einstellen, können Sie es so einstellen
Referenz:
https://stackoverflow.com/a/60654275/4712855
https://stackoverflow.com/a/10774432/4712855
quelle