Ich habe einen Maven-Build, in dem ich das SureFire-Plugin zum Ausführen einiger Komponententests und das FailSafe-Plugin zum Ausführen einiger Integrationstests verwende. Ich möchte nur die Tests des FailSafe-Plugins ausführen.
Es ist keine gute Lösung für mich, verschiedene Profile oder irgendetwas im POM hinzuzufügen, da es sich um einen Multimodul-Build handelt und ich nicht den Pom jedes Moduls bearbeiten möchte.
Es gibt skip.tests
und maven.test.skip
und skipTests
die alle Tests stoppen und skipITs
die nur das ausfallsichere Plugin stoppen .
skipITs
Gibt es also ein Kommandozeilen-Flag für Maven wie , aber mit der Funktionalität von "onlyITs"?
maven
build
integration-testing
maven-surefire-plugin
maven-failsafe-plugin
Matthew Gilliard
quelle
quelle
maven.test.skip
oderskipTests
?skipTests
nur die todsicheren Tests übersprungen, nicht der ausfallsichere Test! Vielleicht ist es eine neue Funktion?Antworten:
Ich fand, dass der einfachste Weg, nur todsichere Tests zu überspringen, darin besteht, todsicher ( aber nicht ausfallsicher ) wie folgt zu konfigurieren :
Auf diese Weise können Sie laufen
mvn verify -Dskip.surefire.tests
und nur todsichere, nicht ausfallsichere Tests werden übersprungen. Es werden auch alle anderen erforderlichen Phasen ausgeführt, einschließlich Vorintegration und Nachintegration , und es wird auch dasverify
Ziel ausgeführt, das erforderlich ist, um Ihren Maven-Build tatsächlich fehlzuschlagen, wenn Ihre Integrationstests fehlschlagen.Beachten Sie, dass hierdurch die Eigenschaft neu definiert wird, mit der angegeben wird, dass Tests übersprungen werden sollen. Wenn Sie also das Kanonische angeben,
-DskipTests=true
wird es von safefire ignoriert, aber fehlersicher wird es respektiert, was unerwartet sein kann, insbesondere wenn bereits Builds / Benutzer dieses Flag angeben . Eine einfache Problemumgehung scheint darin zu bestehen, standardmäßigskip.surefire.tests
den Wert vonskipTests
in Ihrem<properties>
Abschnitt des POM zu verwenden:Wenn nötig, können Sie einen analogen Parameter angeben, der als ausfallsicher bezeichnet wird.
skip.failsafe.tests
Ich habe dies jedoch nicht für erforderlich befunden, da Unit-Tests normalerweise in einer früheren Phase ausgeführt werden. Wenn ich Unit-Tests, jedoch keine Integrationstests ausführen möchte, würde ich sie ausführen dietest
Phase anstelle derverify
Phase. Ihre Erfahrungen können variieren!Diese
skip.(surefire|failsafe).tests
Eigenschaften sollten wahrscheinlich in den todsicheren / ausfallsicheren Code selbst integriert werden, aber ich bin mir nicht sicher, inwieweit dies gegen das Ethos "Sie sind bis auf einen winzigen Unterschied genau das gleiche Plugin" verstoßen würde.quelle
<skipTests>false</skipTests>
weiterhin mit einer beliebigen Kombination von -DskipTests oder -Dskip.surefire.tests funktioniert, da Befehlszeilenargumente die Eigenschaften stackoverflow.com/questions/13708738 zu überschreiben scheinen /… Vielleicht möchten Sie das zu Ihrer Lösung hinzufügen<skipTests>${skip.surefire.tests}</skipTests>
funktioniert nicht mitmaven-surefire-plugin
Version3.0.0-M3
. Alle todsicheren Tests laufen noch. Hat das noch jemand gefunden? Die unten stehende Lösung von Sean Patrick Floyd funktioniert jedoch.Eine Problemumgehung wäre, Folgendes aufzurufen:
Zugegeben, das ist hässlich, aber es kann Ihr Problem lösen.
Oder (ein weiterer Hack):
Referenz:
surefire:test#test
surefire:test#failIfNoTests
quelle
verify
anstelle vonintegration-test
in der 2. Lösung verwenden.failsafe:verify
am Ende des ersten hack (mvn clean test-compile failsafe:integration-test failsafe:verify
) hinzufügen , schlägt der Build fehl, wenn einer der Integrationstests fehlschlägt.Ich verwende den Code von Antonio Goncalves Blog , der perfekt funktioniert.
Sie können die folgenden Eigenschaften verwenden:
-DskipUTs=true
zum Überspringen von todsicheren Tests.-DskipITs=true
zum Überspringen von ausfallsicheren Tests.-DskipTests=true
zum Überspringen aller Tests.Das
pom.xml
ist wie folgt:quelle
skipITs
die Standardeinstellung redundant .Hoffe das hilft!
Versuchen Sie, den Test nur mit FailSafe auszuführen (Plugin für Integrationstest - Sie können standardmäßig nur Integrationstests mit dieser Art ausführen : * / IT .java, ** / IT.java, * /*ITCase.java ;, aber Sie können das leicht von der POM-Datei ändern)
Und wenn Sie nur SureFire verwenden möchten (Plugin für Unit-Tests)
oder jeweils ein Test mit:
quelle
Ich mag das, damit normalerweise alle Phasen ausgeführt werden:
quelle
Um die Kommentare von @danidemi und @GuillaumeHusta zu erweitern:
Um Unit-Tests, aber keine Integrationstests zu überspringen, können Sie dies tun, wenn Sie die neueste Version des Failsafe-Plugins verwenden:
(Bitte geben Sie den genannten Kommentaren eine positive Bewertung, wenn dies Ihnen hilft.)
quelle
Versuchen Sie, Ihre Integrations- oder Komponententests in einem separaten Profil auszuführen. Dann können Sie einfach das Profil aktivieren / deaktivieren.
quelle