2013-05-28 13 views
11

la mia domanda è molto simile a questa: maven-failsafe-plugin Failures and BUILD SUCCESS?maven-failsafe-plugin Errori e BUILD SUCCESS?

e riesco a configurare il failover fail-safe in caso di esito negativo.

Ma se il test va in stato di errore, il plugin failsafe continua a non interrompere la compilazione.

................. 
------------------------------------------------------- 
    T E S T S 
------------------------------------------------------- 
Running xxxxx.IntegrationTierFunctionalTestCase 
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.054 sec <<< FAILURE! 

Results : 

Tests in error: 
    testException(xxxxx.IntegrationTierFunctionalTestCas 

Tests run: 1, Failures: 0, Errors: 1, Skipped: 0 

[WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. build is 
[INFO] [failsafe:verify {execution: functional-test-1024}] 
[INFO] Failsafe report directory: C:\projects\oec-integration-server\trunk\oec-integrati 
[WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. build is 
[INFO] [failsafe:integration-test {execution: functional-test-24}] 
[INFO] Failsafe report directory: C:\projects\oec-integration-server\trunk\oec-integrati 
............. 
[INFO] ------------------------------------------------------------------------ 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESSFUL 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 58 seconds 
[INFO] Finished at: Tue May 28 17:48:13 BST 2013 
[INFO] Final Memory: 114M/781M 
[INFO] ------------------------------------------------------------------------ 

per simplicy IntegrationTierFunctionalTestCase contiene questo codice solo

import org.junit.Test; 
import static org.junit.Assert.fail; 
public class IntegrationTierFunctionalTestCase 
{ 

    @Test 
    public void testException(){ 
     //fail(); 
     throw new RuntimeException("super error"); 
    } 
} 

se io fallisco decommentare() tutta la generazione non correttamente, con generazione non riuscita. ma se lancio un'eccezione, fallisce come mostrato sopra.

configurazione oour plug-in si presenta così

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-failsafe-plugin</artifactId> 
    <version>2.7</version> 
    <configuration> 
     <redirectTestOutputToFile>true</redirectTestOutputToFile> 
     <systemPropertyVariables> 
      <oec.env>TEST</oec.env> 
      <mule.test.timeoutSecs>2400</mule.test.timeoutSecs> 
     </systemPropertyVariables> 
     <additionalClasspathElements> 
      <additionalClasspathElement>${basedir}/src/main/resources/config</additionalClasspathElement> 
      </additionalClasspathElement> 
     </additionalClasspathElements> 
    </configuration> 
    <executions> 
     <execution> 
      <id>functional-test-1024</id> 
      <phase>test</phase> 
      <goals> 
       <goal>integration-test</goal> 
       <goal>verify</goal> 
      </goals> 
      <configuration> 
       <includes> 
        <include>**/IntegrationTierFunctionalTestCase.java</include> 
       </includes> 
       <forkMode>once</forkMode> 
       <argLine>-XX:MaxPermSize=256M -Xmx1024M</argLine> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Che cosa mi manca? E no non voglio avvolgerlo in blocchi try-catch e fallire test manualmente.

risposta

18

È necessario disporre di due blocchi di esecuzioni, poiché l'obiettivo di verifica del plug-in maven-failsafe è destinato a verificare i risultati dei test di integrazione.

<executions> 
    <execution> 
     <id>functional-test-1024</id> 
     <phase>test</phase> 
     <goals> 
      <goal>integration-test</goal> 
     </goals> 
     <configuration> 
      <includes> 
       <include>**/IntegrationTierFunctionalTestCase.java</include> 
      </includes> 
      <forkMode>once</forkMode> 
      <argLine>-XX:MaxPermSize=256M -Xmx1024M</argLine> 
     </configuration> 
    </execution> 
    <execution> 
     <id>verify</id> 
     <phase>verify</phase> 
     <goals> 
      <goal>verify</goal> 
     </goals> 
    </execution> 
    </executions> 

Inoltre, è necessario aggiornare la versione del plugin maven-failsafe a 2.14.1 anziché 2.7. Aggiornamento: Nel frattempo aggiornare a 2.17.

+0

Grazie mille, che ha funzionato, ma non in 2.7 , quindi ho dovuto aggiornare la versione come hai menzionato – udik

+0

Come sottolineato in [questa domanda] (http://stackoverflow.com/questions/12279160/maven-failsafe-plugin-failures-and-build-success) - "il corretto la soluzione è usare failsafe come previsto. L'integrazione -test obiettivo è specificamente progettato per non fallire la build. " Pertanto, sebbene questa informazione sia corretta, non è la risposta alla domanda. – charneykaye

0

Si prega di verificare che la proprietà Maven "maven.test.failure.ignore" non è impostato su "true" in uno dei tuoi file pom.xml Maven, come può essere l'unica ragione per non fermare la build dopo il fallimento del test.

+0

no Non ho nessuna impostazione del genere, accetterò risposta muggito – udik

0

Esiste un motivo in più per il motivo. La verifica Failsafe è alla ricerca di classi di test e si aspetta che siano in $ {project.build.directory}/test-classes - se si dispone di una configurazione diversa, verrà stampato solo "Nessun test da eseguire". e termina se il successo della build è indipendente dal risultato della fase di test di integrazione.

è necessario impostare testClassesDirectory nella configurazione del plugin:

<plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-failsafe-plugin</artifactId> 
      <version>2.18.1</version> 

      <configuration> 
       <systemPropertyVariables> 
        <environmentType>${environmentType}</environmentType> 
       </systemPropertyVariables> 
       <summaryFile>${project.build.directory}/failsafe-reports/failsafe-summary.xml</summaryFile> 
       <testClassesDirectory>${project.build.directory}/classes</testClassesDirectory> 
       <suiteXmlFiles> 
        <suiteXmlFile>${suiteXml}</suiteXmlFile> 
       </suiteXmlFiles> 
      </configuration> 
6

Se si sta eseguendo i test di integrazione di questo tipo:

mvn test-compile failsafe:integration-test 

allora si deve sapere che secondo la maven documentation on failsafe:

Il plug-in Failsafe non fallire la build durante la fase di test di integrazione, permettendo così di eseguire la fase di test post-integrazione.

sono stato in grado di ottenere la compilazione di fallire in questo modo:

mvn test-compile failsafe:integration-test failsafe:verify 

Ed ecco la mia configurazione fail-safe per riferimento:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-failsafe-plugin</artifactId> 
      <version>2.19</version> 
      <configuration> 
       <includes> 
        <include>**/*IT.java</include> 
       </includes> 
      </configuration> 
      <executions> 
       <execution> 
        <goals> 
         <goal>integration-test</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
+0

Grazie. Ho appena modificato l'elenco degli obiettivi da eseguire durante il test di integrazione, per aggiungere 'failsafe: verify' come suggerisci e ha funzionato come previsto: risultato FAILURE anziché SUCCESS. Questo è stato il passo mancante per farlo funzionare. – manuelvigarcia

+0

Questa è la risposta corretta. Solo 'failsafe: verify' è * progettato * per causare il fallimento della build durante l'errore del test di integrazione. – charneykaye

+0

Inoltre, un semplice 'mvn verify' produrrà anche il risultato atteso. – charneykaye

Problemi correlati