2013-07-25 4 views
12

Auf der Maven and Integration Testing Seite heißt es:In Maven ist es möglich, Integrationstests in einem separaten Ordner von Komponententests zu halten?

Die Zukunft Gerücht hat es, dass eine zukünftige Version von Maven wird etwas wie src/it/java in der Integration-Testphase zusätzlich zu src/test unterstützen/Java in der Testphase.

aber das war wieder in 2011-12-11. Ist das schon passiert?

In this answer-"Run maven test not in default src/test/java folder" es erwähnt die <testSourceDirectory> Einstellung, ist sie eine Möglichkeit, dies für Integrationstest nur tun (dh. Die integration-test Phase)?

Ich suche, die Maven FailSafe plugin zu verwenden und zu vermeiden, eine Reihe von Integrationstests umzubenennen oder das noch experimentelle JUnit @Categories zu verwenden.

Antwort

12

können Sie setzen die IT'ss in verschiedene Ordner wie folgt aus:

. 
|-- pom.xml 
`-- src 
    |-- it 
    | `-- java 
    |  `-- com 
    |   `-- soebes 
    |    `-- maui 
    |     `-- it 
    |      `-- BitMaskIT.java 
    |-- main 
    | `-- java 
    |  `-- com 
    |   `-- soebes 
    |    `-- maui 
    |     `-- it 
    |      `-- BitMask.java 
    `-- test 
     `-- java 
      `-- com 
       `-- soebes 
        `-- maui 
         `-- it 
          `-- BitMaskTest.java 

Die folgende benötigt wird, um dann an den Compiler usw.

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.5</version> 
    <executions> 
    <execution> 
     <id>add-test-source</id> 
     <phase>process-resources</phase> 
     <goals> 
     <goal>add-test-source</goal> 
     </goals> 
     <configuration> 
     <sources> 
      <source>src/it/java</source> 
     </sources> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 

Die bekannte Ordner zu machen folgt benötigt wirklich die IT's:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-failsafe-plugin</artifactId> 
    <version>2.15</version> 
    <executions> 
    <execution> 
     <id>integration-test</id> 
     <goals> 
     <goal>integration-test</goal> 
     </goals> 
    </execution> 
    <execution> 
     <id>verify</id> 
     <goals> 
     <goal>verify</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

Dies bedeutet, dass Sie die Integration innerhalb des gleichen Moduls haben können, die hat der Nachteil, dass beim Ausführen der Integrationstests die gleichen Ressourcen wie bei den Komponententests verwendet werden. Eine bessere Lösung wäre es, ein separates Maven-Modul zu erstellen, in das Sie die Integrationstests in den üblichen Ordner src/test/java etc. einfügen und nur das maven-failsafe-Plugin konfigurieren können.

+0

Schön! Nur um klar zu sein, beide Test und es wird für Unit-Tests und Integration Tests gescannt werden, so wird es grundsätzlich immer noch auf den Dateinamen zu unterscheiden zwischen den beiden richtig? – ArtB

+0

Für das erste Szenario korrekt. Aber es ist besser, ein anderes Modul zu haben, in dem Sie die Namenskonvention ändern können. Ich würde das nicht empfehlen. – khmarbaise

+0

Warum läuft das Failsafe-Plugin während ' verifizieren' anstelle von ' Integration-Test' '? Es scheint seltsam für Failsafe zu laufen nach ' Post-Integration-Test' '? –

Verwandte Themen