2010-06-23 8 views
54

Verwenden Sie JUnit 4.8 und die neuen @Category-Annotationen, gibt es eine Möglichkeit, eine Teilmenge von Kategorien auszuwählen, die mit dem Surefire-Plugin von Maven ausgeführt werden sollen?Wie man JUnit Tests nach Kategorie in Maven ausführt?

Zum Beispiel habe ich:

@Test 
public void a() { 
} 

@Category(SlowTests.class) 
@Test 
public void b() { 
} 

Und ich möchte alle nicht langsam Tests wie in auszuführen: (beachten Sie, dass die -Dtest.categories wurde von mir aus ...).

mvn test -Dtest.categories=!SlowTests // run non-slow tests 
mvn test -Dtest.categories=SlowTests // run only slow tests 
mvn test -Dtest.categories=SlowTests,FastTests // run only slow tests and fast tests 
mvn test // run all tests, including non-categorized 

Also der Punkt ist, dass ich mag Maven nicht Test-Suiten (Maven nur nimmt alle Unit-Tests im Projekt, was sehr praktisch ist) zu schaffen, und ich möchte in der Lage sein zu holen die Tests nach Kategorie. Ich denke, ich habe gerade die -Dtest.categories erfunden, also habe ich mich gefragt, ob es eine ähnliche Einrichtung gibt, die ich benutzen kann?

+0

See [Misch testng und junit] (http://stackoverflow.com/questions/9172820/mixing-testng-junit-mit-maven-surefire-plugin-version-2-11-und-höher-für-integ) für weitere Details. Von maven-surefire-plugin werden Version 2.11-Kategorien unterstützt. –

Antwort

1

Nicht genau dasselbe, aber mit dem todsicheren Plugin, können Testklassen basierend auf dem Dateinamen gewählt werden. Sie verwenden jedoch keine Junit-Kategorien.

Ein Beispiel für das Ausführen von DAO-Tests.

<executions> 
    <execution> 
    <id>test-dao</id> 
     <phase>test</phase> 
      <goals> 
      <goal>test</goal> 
     </goals> 
      <configuration> 
      <excludes> 
       <exclude>none</exclude> 
      </excludes> 
      <includes>     
       <include>**/com/proy/core/dao/**/*Test.java</include> 
      </includes> 
     </configuration> 
    </execution> 

http://maven.apache.org/plugins/maven-surefire-plugin/examples/inclusion-exclusion.html

67

Maven ist seit aktualisiert und Kategorien verwenden können.

Ein Beispiel aus den Surefire documentation:

<plugin> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.11</version> 
     <configuration> 
     <groups>com.mycompany.SlowTests</groups> 
     </configuration> 
</plugin> 

Dies wird jede Klasse mit der

+7

Version 2.11 funktionierte nicht für mich, da Surefire die von mir angegebenen Gruppen ignorierte. Das Upgrade auf die Version 2.12.3 von surefire Plugin hat den Trick gemacht –

+5

Wie macht man mehrere Konfigurationen für verschiedene Kategorien? Dh das OP wollte in der Lage sein, eine Kategorie in der Kommandozeile anzugeben, aber wenn die Kategorie im POM spezifiziert ist, wie spezifiziert man eine in der Kommandozeile? –

+0

Achtung! Version 2.11 ignoriert Gruppen! Das Beispiel unter http://maven.apache.org/surefire/maven-surefire-plugin/examples/junit.html#Using_JUnit_Categories ist immer noch falsch! – Heezer

38

Basierend auf diesen blog post@Category(com.mycompany.SlowTests.class) Annotation führen - und zu vereinfachen - fügen Sie diese zu Ihrer pom.xml:

<profiles> 
    <profile> 
     <id>SlowTests</id> 
     <properties> 
      <testcase.groups>com.example.SlowTests</testcase.groups> 
     </properties> 
    </profile> 
    <profile> 
     <id>FastTests</id> 
     <properties> 
      <testcase.groups>com.example.FastTests</testcase.groups> 
     </properties> 
    </profile> 
</profiles> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.13</version> 
      <dependencies> 
       <dependency> 
        <groupId>org.apache.maven.surefire</groupId> 
        <artifactId>surefire-junit47</artifactId> 
        <version>2.13</version> 
       </dependency> 
      </dependencies> 
      <configuration> 
       <groups>${testcase.groups}</groups> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

dann in der Befehlszeile

mvn install -P SlowTests 
mvn install -P FastTests 
mvn install -P FastTests,SlowTests 
+0

Version 2.13 von todsicheren Plugin funktionierte nicht für mich. Ich habe diesen Fehler: "Gruppen/excludedGroups erfordern TestNG oder JUnit48 + auf Projekt Test Klassenpfad", obwohl ich Junit 4.11 verwende. Das Downgrade des todsicheren Plugins auf 2.12.2 hat den Fehler behoben. –

+0

Dies funktionierte für mich mit der Version 2.17 von Surefire. Ich musste die Abhängigkeit org.apache.maven.surefire: surefire-junit47: 2.13 zu org.apache.maven.surefire ändern: common-junit48: 2.17. – Kkkev

+0

das Ausführen von zwei Profilen togather funktioniert nicht für mich –

5

können Sie

mvn test -Dgroups="com.myapp.FastTests, com.myapp.SlowTests" 

verwenden aber sicher, dass Sie

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.11</version> 
    <dependencies> 
    <dependency> 
     <groupId>org.apache.maven.surefire</groupId> 
     <artifactId>surefire-junit47</artifactId> 
     <version>2.12.2</version> 
    </dependency> 
    </dependencies> 
</plugin> 

Siehe docs in richtig die Maven todsichere Plugin konfigurieren: https://maven.apache.org/surefire/maven-surefire-plugin/examples/junit.html

16

Ich hatte einen ähnlichen Fall, wo ich will Führen Sie alle Tests außer einer bestimmten Kategorie aus (zum Beispiel, weil ich Hunderte von nicht kategorisierten Legacy-Tests habe und ich nicht alle ändern möchte/möchte)

Die Maven todsichere Plugin ermöglicht Kategorien ausschließen, zum Beispiel:

<profiles> 
    <profile> 
     <id>NonSlowTests</id> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId> 
        <configuration> 
         <excludedGroups>my.category.SlowTest</excludedGroups> 
        </configuration> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 
+0

Hot möchten Sie nur eine bestimmte Gruppe ausführen? – 2Big2BeSmall

+1

@Francy nur mit dem entsprechenden Profil laufen, aus diesem Beispiel: mvn test -P NonSlowTests – Joel

+0

Können Sie mehrere Gruppen ausschließen? –

3

ich viel Zeit auf diesen Fehler verloren „Gruppen/excludedGroups erfordern TestNG oder JUnit48 + auf Projekt Test Classpath“, weil ich dachte, dass ich mit eine schlechte Version von Junit oder eine schlechte Version des todsicheren Plugins oder eine Kombination, die nicht passt.

Es war nichts davon: In meinem Projekt hatte ich ein "Config" -Modul, das vor dem Modul, das ich testen wollte, gebaut wurde. Dieses Modul hatte keine junit Abhängigkeit -> es hatte keine junit auf dem Classpath ...

Dieser Fehler kann anderen helfen ...