Ich habe ein maven2-Multimodulprojekt und in jedem meiner untergeordneten Module habe ich JUnit-Tests, die benannt sind, Test.java
und Integration.java
für Komponententests bzw. Integrationstests. Wenn ich ausführe:
mvn test
Alle JUnit-Tests *Test.java
in den untergeordneten Modulen werden ausgeführt. Wenn ich ausführe
mvn test -Dtest=**/*Integration
Keiner der Integration.java
Tests wird in den untergeordneten Modulen ausgeführt.
Diese scheinen mir genau der gleiche Befehl zu sein, aber der mit der -Dtest = / * Integration ** funktioniert nicht. Er zeigt 0 Tests an, die auf der übergeordneten Ebene ausgeführt werden, für die es keine Tests gibt
Antworten:
Sie können Maven's Surefire so einrichten, dass Unit-Tests und Integrationstests separat ausgeführt werden. In der Standard-Unit-Test-Phase führen Sie alles aus, was nicht mit einem Integrationstest übereinstimmt. Anschließend erstellen Sie eine zweite Testphase , in der nur die Integrationstests ausgeführt werden.
Hier ist ein Beispiel:
quelle
Der Maven-Build-Lebenszyklus enthält jetzt die Phase "Integrationstest" zum Ausführen von Integrationstests, die getrennt von den Unit-Tests ausgeführt werden, die während der "Test" -Phase ausgeführt werden. Es wird nach "package" ausgeführt. Wenn Sie also "mvn verify", "mvn install" oder "mvn deploy" ausführen, werden auf dem Weg Integrationstests ausgeführt.
Standardmäßig wird die Integration-Test Testklassen genannt
**/IT*.java
,**/*IT.java
und**/*ITCase.java
, aber das konfiguriert werden kann.Einzelheiten dazu, wie Sie dies alles verkabeln können, finden Sie im Failsafe-Plugin , auf der Failsafe-Verwendungsseite (nicht korrekt von der vorherigen Seite verlinkt, während ich dies schreibe) sowie in diesem Sonatype-Blogbeitrag .
quelle
mvn integration-test
auch Komponententests ausgeführt (mithilfe von Surefire), es werden jedochmvn failsafe:integration-test
nur die ausfallsicheren Integrationstests ausgeführt.package
Phase, das heißt , sollte ich alle meine IT Java - Quellcode unter setzen ,src/main/java
anstattsrc/test/java
richtig?Ich habe genau das getan, was Sie tun möchten, und es funktioniert großartig. Komponententests "* Tests" werden immer ausgeführt, und "* IntegrationTests" werden nur ausgeführt, wenn Sie eine MVN-Überprüfung oder MVN-Installation durchführen. Hier ist es der Ausschnitt aus meinem POM. serg10 hatte es fast richtig .... aber nicht ganz.
Viel Glück!
quelle
clean compile integration-test -Dmaven.test.failure.ignore=false
Sie können sie sehr einfach mit JUnit-Kategorien und Maven aufteilen.
Dies wird im Folgenden sehr, sehr kurz durch Aufteilen von Einheiten- und Integrationstests gezeigt.
Definieren Sie eine Marker-Schnittstelle
Der erste Schritt beim Gruppieren eines Tests anhand von Kategorien besteht darin, eine Markierungsschnittstelle zu erstellen.Diese Schnittstelle wird verwendet, um alle Tests, die Sie ausführen möchten, als Integrationstests zu markieren.
Markieren Sie Ihre Testklassen
Fügen Sie die Kategorieanmerkung oben in Ihrer Testklasse hinzu. Es nimmt den Namen Ihrer neuen Schnittstelle an.
Konfigurieren Sie Maven Unit Tests
Das Schöne an dieser Lösung ist, dass sich für den Unit-Test nichts wirklich ändert.Wir fügen dem Maven Surefire-Plugin einfach eine Konfiguration hinzu, damit Integrationstests ignoriert werden.
Wenn Sie a
mvn clean test
ausführen, werden nur Ihre nicht markierten Komponententests ausgeführt.Konfigurieren Sie Maven-Integrationstests
Auch hier ist die Konfiguration sehr einfach.Wir verwenden das ausfallsichere Standard-Plugin und konfigurieren es so, dass nur die Integrationstests ausgeführt werden.
Die Konfiguration verwendet ein Standardausführungsziel, um das ausfallsichere Plugin während der Integrationstestphase des Builds auszuführen.
Sie können jetzt eine
mvn clean install
.Dieses Mal werden neben den laufenden Unit-Tests auch die Integrationstests während der Integrationstestphase ausgeführt.
quelle
Sie sollten versuchen, das ausfallsichere Maven-Plugin zu verwenden . Sie können festlegen, dass bestimmte Tests enthalten sein sollen.
quelle
maven-failsafe-plugin
ist zu Plugin Graveyardfailsafe
Plugin verschoben wurdemaven-failsafe-plugin
. Es sieht so aus, als ob dasmaven-failsafe-plugin
noch aktiv ist (Dokumente wurden zuletzt im März 2014 gepusht).Standardmäßig führt Maven nur Tests aus, deren Klassenname Test enthält.
Benennen Sie in IntegrationTest um und es wird wahrscheinlich funktionieren.
Alternativ können Sie die Maven-Konfiguration ändern, um diese Datei einzuschließen, aber es ist wahrscheinlich einfacher und besser, nur Ihre Tests SomethingTest zu nennen.
Aus Ein- und Ausschlüssen von Tests :
quelle
Eine andere Möglichkeit, Integrationstests mit Maven durchzuführen, besteht darin, die Profilfunktion zu verwenden:
Wenn Sie 'mvn clean install' ausführen , wird der Standard-Build ausgeführt. Wie oben angegeben, werden Integrationstests ignoriert. Das Ausführen von 'mvn clean install -P Integrationstests' umfasst die Integrationstests (ich ignoriere auch meine Staging-Integrationstests). Außerdem habe ich einen CI-Server, der jede Nacht meine Integrationstests ausführt und dafür den Befehl 'mvn test -P Integrationstests' ausführe .
quelle
Sie können der Maven-Dokumentation folgen, um die Komponententests mit dem Build auszuführen und die Integrationstests separat auszuführen.
Auf diese Weise können Sie alle Integrationstests ausführen, die standardmäßig deaktiviert sind. Um sie auszuführen, verwenden Sie diesen Befehl:
quelle
Sie sollten das Maven Surefire-Plugin verwenden , um Unit-Tests auszuführen, und das Maven Failsafe-Plugin , um Integrationstests auszuführen.
Bitte folgen Sie unten, wenn Sie die Ausführung dieser Tests mithilfe von Flags umschalten möchten.
Maven-Konfiguration
Daher werden Tests gemäß den folgenden Flaggenregeln übersprungen oder umgeschaltet:
Tests können durch folgende Flags übersprungen werden:
-DskipTests
Überspringt sowohl Unit- als auch Integrationstests-DskipUnitTests
Überspringt Unit-Tests, führt jedoch Integrationstests aus-DskipIntegrationTests
Überspringt Integrationstests, führt jedoch Komponententests ausAusführen von Tests
Führen Sie unten aus, um nur Unit-Tests auszuführen
Sie können den folgenden Befehl ausführen, um die Tests auszuführen (sowohl Einheit als auch Integration).
Befolgen Sie die Anweisungen, um nur Integrationstests auszuführen
Oder überspringen Sie Unit-Tests
Um Integrationstests während zu überspringen
mvn install
, folgen Sie außerdemSie können alle Tests mit überspringen
quelle