2009-01-05 11 views
17

Ich möchte testng mit der Surefire plug-in von Maven verwenden. Die Idee besteht darin, einige Tests mit einer Gruppe integrationTest zu taggen und das Plug-in zweimal auszuführen: für das Ziel test mit Ausnahme der Gruppe integrationTest und für das Ziel integration-test einschließlich der Gruppe integrationTest nur.Wie funktioniert das Maven Surefire Plug-In mit verschiedenen Gruppen für Test und Integrationstest?

Ich fand einige material für das Ausführen des Plug-Ins für beide Ziele und das funktioniert, aber die Gruppe für den zweiten Lauf funktioniert nicht (kein Test wird ausgeführt). Hier

ist die Plug-in-Konfiguration in dem Build-Elemente meiner pom.xml:

<plugin> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <configuration> 
     <excludedGroups>integrationTest</excludedGroups> 
     <reportFormat>brief</reportFormat> 
     <trimStackTrace>true</trimStackTrace> 
     <useFile>false</useFile> 
    </configuration> 
    <executions> 
     <execution> 
     <id>integration-test</id> 
     <phase>integration-test</phase> 
     <goals> 
      <goal>test</goal> 
     </goals> 
     <configuration> 
      <groups>integrationTest</groups> 
      <excludedGroups/> 
      <reportsDirectory>${project.build.directory}/surefire-reports/integration</reportsDirectory> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 

Jede Idee? mvn integration-test läuft alle Tests Einheit wie erwartet (mit Ausnahme der Gruppe integrationTest), aber der zweite Testlauf schreibt nur:

Lauftestsuite
Tests laufen: 0, Fehler: 0, Fehler: 0, Skipped: 0, die verstrichene Zeit : 0,562 sec

Das Ergebnis mvn test wie erwartet wird, ignoriert integrationTest wird Tests durchführen und die Gruppe.

Antwort

14

Ich habe es - irritierende Konfiguration Implementierung!

<excludedGroups/> überschreibt nicht <excludedGroups>integrationTest</excludedGroups>. Sie müssen stattdessen eine beliebige (unbekannte) Gruppe angeben, z. B. <excludedGroups>none</excludedGroups>.

+2

excludedGroups funktioniert nicht mit TestNG 5.14.1 - verwenden Sie stattdessen 5.14.2! –

+2

Mit Surefire 2.18.1 und JUnit 4.10 bekomme ich den Fehler '[ERROR] Fehler beim Ausführen des Ziels org.apache.maven.plugins: maven-surefire-plugin: 2.18.1: Test (Integrationstest) am Projektbeispiel- Projekt: Ausführungsintegrationstest von Ziel org.apache.maven.plugins: maven-surefire-plugin: 2.18.1: Test fehlgeschlagen: Es gab einen Fehler im gegabelten Prozess [FEHLER] java.lang.RuntimeException: Kann nicht Lastkategorie: keine'. Es scheint, dass die Gruppe, mit der Sie überschreiben, mindestens existieren muss, auch wenn sie nirgends verwendet wird. Ich tue dies mit einer 'öffentlichen Schnittstelle SystemTest erweitert IntegrationTest' und schließe * diese * Kategorie aus. – orlade

9

Die Failsafe plugin ist der beste Weg, dies zu tun (möglicherweise war es nicht verfügbar, wenn Sie diese Frage gepostet haben). Es fügt dem Build-Lebenszyklus eine Integrationstestphase hinzu. Es ermöglicht Ihnen, vor und nach den Tests Setup- und Teardown-Aktivitäten auszuführen, was beispielsweise für die Verwaltung eines eingebetteten Containers nützlich ist.

+0

Sie könnten Recht haben: Maven Central Suche Datum der ältesten Maven-Failsafe-Plugin-Artefakt zu 12. Januar 2010. Seitdem, denke ich, es ist die bevorzugte Lösung für das Problem geworden. –