2013-05-28 14 views

risposta

26

In primo luogo non si deve eseguire quelle test di integrazione attraverso il test di life cycle, causare pre-integrazione-test, integrazione-test e post-integrazione-test fase del ciclo di vita esiste. Oltre a quello per i test di integrazione è responsabile il maven-failsafe-plugin.

Ci sono diverse opzioni per gestire le vostre situazioni. In primo luogo si dovrebbe seguire la naming conventions per l'integrazione mette alla prova

<includes> 
<include>**/IT*.java</include> 
<include>**/*IT.java</include> 
<include>**/*ITCase.java</include> 
</includes> 

che significa mettere i test di integrazione nella cartella predefinita src/test/java. Se hai una build multi-modulo, sarebbe meglio avere un modulo separato che contenga solo i test di integrazione o puoi seguire il percorso che hai deciso di usare una cartella separata (che non è la migliore):

Primo è necessario aggiungere la cartella utilizzando il buildhelper-maven-plugin per ottenere quei test di integrazione in fase di compilazione in questo modo:

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

e si deve alla configurazione Maven-fail-safe-plugin come questo:

<project> 
    [...] 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-failsafe-plugin</artifactId> 
     <version>2.14.1</version> 
     <executions> 
      <execution> 
      <goals> 
       <goal>integration-test</goal> 
       <goal>verify</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
    [...] 
</project> 

Dopo aver configurato puoi eseguire il tuo integra test zione tramite:

mvn verify 
+0

chiedendo semplicemente, se non c'è nulla che accade nel test post-integrazione, sarebbe ugualmente valido usare 'mvn integration-test'? – vikingsteve

+0

Sì, funzionerà, ma suggerisco di utilizzare sempre "mvn verify", che è dopo la post-integrazione e si assicura di eseguire la fase post-integrazione. – khmarbaise

13

@khmarbaise è giusto con la sua raccomandazione (quindi +1 per questo), ma voglio rispondere alla tua domanda, senza speculare sui motivi per cui la fonte di prova si trovano da qualche altra parte.

Se i test si trovano in un'altra directory rispetto alla directory standard src/test/java, la soluzione più semplice è quello di cambiare il valore di default del parametro di configurazione testSourceDirectory che è definito nella Super POM.

ad es. per src/foobar/java utilizzare

<build> 
    <testSourceDirectory>src/foobar/java</testSourceDirectory> 
</build> 

allora si può semplicemente eseguire mvn test per eseguire i test.


Soluzione più complessa ...

Se non si desidera modificare la configurazione pom.xml Puoi specificare il parametro testSourceDirectory sulla riga di comando come questo:

mvn -DtestSourceDirectory=src/foobar/java clean test 

Ma assicurati che le tue fonti siano compilate.Altrimenti non saranno trovati ed eseguiti. Nell'esempio di cui sopra le fonti di prova non vengano a trovarsi in una posizione che viene compilato per impostazione predefinita, in modo che, tuttavia, devono cambiare il pom e aggiungere la directory alla lista delle fonti di prova, utilizzando il buildhelper plugin:

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

Se non vuoi cambiare la configurazione del valore di default nel pom e non vuoi passare la nuova directory sulla riga di comando devi configurare il percorso nel plugin maven-buildhelper-plug e nel plugin maven-surefire-nel tuo pom .xml come questo:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.codehaus.mojo</groupId> 
      <artifactId>build-helper-maven-plugin</artifactId> 
      <version>1.8</version> 
      <executions> 
       <execution> 
        <id>add-test-source</id> 
        <phase>generate-sources</phase> 
        <goals> 
         <goal>add-test-source</goal> 
        </goals> 
        <configuration> 
         <sources> 
          <source>src/foobar/java</source> 
         </sources> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.14.1</version> 
      <configuration> 
       <testSourceDirectory>src/foobar/java</testSourceDirectory> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

Ora di nuovo il semplice utilizzo di mvn test sarà exec ute il test nella posizione non standard.

+0

Come già accennato nella domanda, stiamo parlando di test di integrazione e * non * sui test delle unità, quindi cambiare la configurazione per il plugin di maven-surefire che è responsabile per i test delle unità è la strada sbagliata. Meglio usare il plugin maven-failsafe che è destinato ai test di integrazione. Oltre a quello basato sulla tua modifica suggerita, i test di integrazione verrebbero eseguiti durante il ciclo di vita del test che è contrario alle convenzioni di Maven. – khmarbaise

+0

@khmarbaise Come ho già sottolineato, seguo la tua raccomandazione e ho dato un +1. Ma il titolo della domanda è _Come eseguire ** UnitTests ** ..._ e l'unico suggerimento per il test di integrazione è il nome della directory che viene utilizzata per il codice di test (non riesco a trovare un posto dove @KS MANOJ sottolinea che sta eseguendo test di integrazione e che parla del plugin failsafe). Quindi penso di aver dato una risposta ragionevole alle semplici domande su come eseguire i test in una cartella diversa da quella predefinita (_Ma ho i miei test in una cartella diversa ..._). – FrVaBe

+0

@khmarbaise A proposito, la mia soluzione non influisce sull'esecuzione del plugin surefire o failsafe (ad es. In esecuzione in un ciclo di vita diverso). Qualunque sia la convenzione di denominazione @K S MANOJ scelta o qualunque configurazione di plugin abbia fatto (non lo sappiamo ...), la modifica della cartella predefinita per le origini di test non cambierà nessuna di queste impostazioni e la build verrà eseguita come configurato da @K S MANOJ. – FrVaBe

Problemi correlati