Führen Sie Unit-Tests in IntelliJ IDEA aus mehreren Modulen zusammen aus

83

Wie kann ich alle Tests von zwei oder mehr IDEA-Modulen gleichzeitig ausführen?

Ich verwende viele Module und es ist wichtig, alle Komponententests häufig auszuführen. Wenn ich mehr als einen Ordner zum Ausführen auswähle, gibt es im Kontextmenü keine Option zum Ausführen mehr.

Wojtek Erbetowski
quelle

Antworten:

112

Bester Weg Weg: (nach 3 Jahren bearbeiten)

Es gibt noch einen besseren Weg, dies zu erreichen.

  1. Wählen Sie das Menü "Ausführen" → "Konfigurationen bearbeiten ...". Klicken Sie in der linken oberen Ecke auf grünes Plus und wählen Sie JUnit.

  2. Wählen Sie "Testart" bis "Muster" und geben Sie diesen regulären Ausdruck genau so ein, wie Sie ihn sehen: ^(?!.*IT$).*$(Er beginnt mit Caret ^und endet mit Dollar $). In diesem regulären Ausdruck heißt es: Alle Tests, die nicht mit IT in ihrem Namen abgeschlossen werden .

  3. Wählen Sie "Nach Tests suchen" bis "Im gesamten Projekt". Das Arbeitsverzeichnis sollte auf das Arbeitsverzeichnis des obersten Moduls eingestellt sein (es sollte standardmäßig eingestellt sein).

  4. Geben Sie einen Namen für Ihren Test wie "Alle Unit-Tests" ein. Ich bevorzuge es auch, die Option "Teilen" zu markieren, damit diese Konfiguration später nicht verschwindet. Klicken Sie auf Übernehmen und auf OK.

Sie können mit diesem regulären Ausdruck experimentieren, um Ihren Anforderungen zu entsprechen.

Ursprüngliche Antwort:

Es ist machbar, obwohl es nicht bequem ist.

  1. Wählen Sie das erste Modul aus, klicken Sie mit der rechten Maustaste auf das test/javaVerzeichnis und wählen Sie "Alle Tests ausführen". Es wird eine Testkonfiguration erstellt.
  2. Wählen Sie "Konfigurationen bearbeiten" und aktivieren Sie "Freigeben" für die neu erstellte Konfiguration, damit diese gespeichert wird.
  3. Wählen Sie das zweite Modul "Alle Tests ausführen" aus und aktivieren Sie auch in dieser Konfiguration "Freigeben".
  4. Klicken Sie im Abschnitt "Vor dem Start" auf "+" und wählen Sie "Eine andere Konfiguration ausführen" und anschließend die Konfiguration des ersten Moduls.

Auf diese Weise führen Sie Konfigurationen in einer Sequenz aus und jede Konfiguration erhält eine neue Registerkarte. Trotzdem besser als nichts.

Tomasz Kalkosiński
quelle
Vielen Dank! Mit Abstand der sauberste Weg.
Ich frage mich,
Vielen Dank! Sie haben mir Zeit gespart, und dies ist bei weitem immer noch die cleverste Methode, die ich finden kann, um sowohl das Generieren von Berichten mit mehreren Abdeckungen als auch das Problem eines einheitlichen Fallläufers auf einmal zu lösen .
Fei
Ich habe gerade meinen Anser mit einer besseren Lösung bearbeitet @CoderSpinoza
Tomasz Kalkosiński
10
Die aktualisierte Version ist nicht so gut , wenn Ihre Testfälle zur Laufzeit modulspezifische Ressourcen verwenden - ich bevorzuge immer noch die ursprüngliche Lösung.
Fei
Wie kann ich mit dieser Konfiguration meine Gradle-Abhängigkeiten berücksichtigen? Jetzt schlägt es fehl, wenn Klassen in Guava fehlen. Wenn Sie die Tests eines einzelnen Moduls ausführen, funktioniert dies einwandfrei.
Jorn
22

Sie müssen eine "Konfiguration ausführen" erstellen:

  1. Gehen Sie zum Dropdown oben rechts neben der Schaltfläche "Erstellen" und klicken Sie darauf
  2. Wählen Sie "Konfigurationen bearbeiten".
  3. Klicken Sie nun auf die Schaltfläche "+", um eine neue Ausführungskonfiguration hinzuzufügen, und wählen Sie JUnit aus
  4. Wenn Sie dann die "Konfiguration ausführen" konfigurieren, finden Sie eine Dropdown-Liste "Testart". Wählen Sie "Alle Klassen im Verzeichnis".
  5. Wählen Sie das Verzeichnis aus, das Sie als Stammverzeichnis verwenden möchten. Sie können das Verzeichnis der obersten Ebene für Ihr Projekt oder eines der Verzeichnisse für Ihre Module auswählen.
  6. Wählen Sie das IntelliJ-Modul aus, von dem aus Sie den Klassenpfad abrufen können (es kann das Projekt der obersten Ebene sein, wenn es einen Klassenpfad hat).
Alonso Dominguez
quelle
Vielen Dank für den Tipp, der das Problem jedoch nicht löst. Der perfekte Weg wäre, mehrere Verzeichnisse auszuwählen, nicht nur eines. Die sachliche Lösung besteht darin, Muster zu verwenden, aber möglicherweise nur das Paket zu strukturieren, nicht die Verzeichnisse ...
Wojtek Erbetowski
15
Wählen Sie unter "Testart" die Option "Alle im Paket" und aktivieren Sie das Kontrollkästchen "Im gesamten Projekt". Dadurch werden Tests in allen Modulen ausgeführt.
Martin Odhelius
5
Ich möchte, dass jedes Modul mit einem eigenen Modulverzeichnis als Arbeitsverzeichnis ausgeführt wird - das scheint nicht möglich zu sein, es scheint ein einzelnes Modulverzeichnis für das Ganze zu verwenden.
Bacar
@ MartinOdhelius, das ist die bisher sauberste Lösung
Hemil
10

Wählen Sie alle Module aus, klicken Sie mit der rechten Maustaste darauf und führen Sie alle Tests aus. Dadurch wird eine Konfiguration mit dem Namen "Gesamtes Projekt" erstellt, die Sie jederzeit erneut ausführen können.

Ich fand dies besser als die akzeptierte Antwort, da hierdurch die Komponententests für jedes Modul separat ausgeführt werden. Wenn Ihre Testfälle während der Laufzeit modulspezifische Ressourcen verwenden, funktioniert der beste Weg der akzeptierten Antwort nicht.

Wählen Sie alle Module aus

Wählen Sie alle Module aus

Klicken Sie mit der rechten Maustaste und wählen Sie, um alle Tests auszuführen

Klicken Sie mit der rechten Maustaste und wählen Sie, um alle Tests auszuführen

Holen Sie sich eine neue Laufkonfiguration

Holen Sie sich eine neue Laufkonfiguration

Dave Thomas
quelle
Es reicht aus, im ersten Schritt mehr als ein Modul auszuwählen.
user7610
2
Meiner Meinung nach sollte dies die akzeptierte Antwort sein. Der einzige Vorbehalt, den ich habe, ist die Verwendung des Begriffs "am einfachsten". Leider ist es nicht einfach, Konfigurationen mit Intellij auszuführen. Es gibt viele Möglichkeiten, einfache Aufgaben mit Konfigurationen zu erledigen, und normalerweise nur eine, wenn überhaupt. Daher besteht Ihre Aufgabe häufig darin, die verschiedenen Optionen zu durchlaufen und nach der funktionierenden zu suchen. Gar nicht so einfach.
David Sackstein
Dadurch werden alle Tests im Projekt (Gesamtes Projekt) ausgeführt, obwohl ich einen kleinen Teil der Module auswähle. Das will ich nicht. In meinem Fall teilen sich alle Module, für die ich Tests ausführen möchte, ein gemeinsames Paket, sodass ich die resultierende Konfiguration "Gesamtes Projekt" bearbeiten und das Paket hinzufügen kann, das filtert, um den Test nur für die Teilmenge der Module auszuführen.
Albert Vila Calvo
5

Für mich haben beide Lösungen nicht funktioniert oder nicht funktioniert, wie erwartet.

Für mich habe ich 3 Module. Meine Modulabhängigkeiten sehen so aus

Präsentation -> Domain -> Daten

Ich wollte nur alle Tests zusammen durchführen. Also habe ich mir den Ansatz "Über Modulabhängigkeiten hinweg" ausgedacht

Meine Einstellungen sehen folgendermaßen aus:

Geben Sie hier die Bildbeschreibung ein

Langusten Gustel
quelle
2

Dies funktionierte bei mir für ein Projekt mit mehreren Modulen.

Erstellen Sie eine neue JUnit-Run / Debug-Konfiguration. Testart: 'Alles im Paket' Nach Tests suchen: 'Gesamtes Projekt'

Sie müssen auch ein Arbeitsverzeichnis angeben.

Dan
quelle
Das habe ich auch getan.
miva2
1

Ein weiterer nicht so offensichtlicher Fall ist, wenn für mehr als ein Projekt eine Codeabdeckung erforderlich ist. Die naive Lösung wäre, mehrere Projekte auszuwählen und alle Unit-Tests gleichzeitig auszuführen. Wie sich herausstellt, können Komponententests fehlschlagen, wenn sich der Klassenpfad ändert und IntelliJ genau einen Klassenpfadeintrag pro Laufkonfiguration hat. In diesem Fall ist es tatsächlich ausreichend, Unit-Tests für Projekte nacheinander durchzuführen. Dies liegt daran, dass IntelliJ (2017.2.5 Community Edition) am Ende jedes Laufs fragt, ob die gesammelte Deckung die zuvor gesammelten Deckungsstatistiken ersetzen oder zu diesen hinzufügen soll.

gabor
quelle