2013-03-20 101 views
9

Ho un problema nell'esecuzione di test JUnit in parallelo quando si utilizzano JUnit, Groovy, Spock e Maven. Quando li esegue, ottengo il seguente dopo la prova sono passati con successo:JUnit + Maven + Test parallelo Errore di esecuzione

[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 18.362s 
[INFO] Finished at: Wed Mar 20 15:14:25 CET 2013 
[INFO] Final Memory: 16M/221M 
[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.14:test (default-test) on project spock-webdriver: ExecutionException; nested exception is java.util.concurrent.ExecutionException: java.lang.RuntimeException: There was an error in the forked process 
[ERROR] java.lang.NoSuchMethodError: org.apache.maven.surefire.common.junit4.JUnit4RunListener.rethrowAnyTestMechanismFailures(Lorg/junit/runner/Result;)V 
[ERROR] at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:129) 
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
[ERROR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
[ERROR] at java.lang.reflect.Method.invoke(Method.java:601) 
[ERROR] at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray2(ReflectionUtils.java:208) 
[ERROR] at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:158) 
[ERROR] at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:86) 
[ERROR] at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153) 
[ERROR] at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:95) 
[ERROR] -> [Help 1] 
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. 
[ERROR] Re-run Maven using the -X switch to enable full debug logging. 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles: 
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException 

Quando si attiva per forzare utilizzando Junit 47 Provider nel mio pom.xml, ottengo che:

[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 3.271s 
[INFO] Finished at: Wed Mar 20 15:31:42 CET 2013 
[INFO] Final Memory: 17M/178M 
[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.14:test (default-test) on project spock-webdriver: ExecutionException; nested exception is java.util.concurrent.ExecutionException: java.lang.RuntimeException: There was an error in the forked process 
[ERROR] java.lang.NoSuchMethodError: org.apache.maven.surefire.util.TestsToRun.size()I 
[ERROR] at org.apache.maven.surefire.junitcore.JUnitCoreProvider.invoke(JUnitCoreProvider.java:123) 
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
[ERROR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
[ERROR] at java.lang.reflect.Method.invoke(Method.java:601) 
[ERROR] at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray2(ReflectionUtils.java:208) 
[ERROR] at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:158) 
[ERROR] at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:86) 
[ERROR] at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:153) 
[ERROR] at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:95) 
[ERROR] -> [Help 1] 
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. 
[ERROR] Re-run Maven using the -X switch to enable full debug logging. 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles: 
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException 

Il pom.xml sembra che questo

<dependencies> 
     <dependency> 
      <groupId>org.seleniumhq.selenium</groupId> 
      <artifactId>selenium-java</artifactId> 
      <version>2.31.0</version> 
      <scope>compile</scope> 
     </dependency> 

     <!--If this is commented out parallel testing is not working!!! When in testexecution itself is not working --> 
     <dependency> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.14</version> 
     </dependency> 

     <dependency> 
      <groupId>org.spockframework</groupId> 
      <artifactId>spock-maven</artifactId> 
      <version>0.7-groovy-2.0</version> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.codehaus.gmaven</groupId> 
       <artifactId>gmaven-plugin</artifactId> 
       <version>1.3</version> 
       <configuration> 
        <providerSelection>1.7</providerSelection> 
        <source/> 
       </configuration> 
       <executions> 
        <execution> 
         <goals> 
          <goal>testCompile</goal> 
         </goals> 
        </execution> 
       </executions> 
       <dependencies> 
        <dependency> 
         <groupId>org.codehaus.gmaven.runtime</groupId> 
         <artifactId>gmaven-runtime-1.7</artifactId> 
         <version>1.3</version> 
         <exclusions> 
          <exclusion> 
           <groupId>org.codehaus.groovy</groupId> 
           <artifactId>groovy-all</artifactId> 
          </exclusion> 
         </exclusions> 
        </dependency> 
        <dependency> 
         <groupId>org.codehaus.groovy</groupId> 
         <artifactId>groovy-all</artifactId> 
         <version>2.0.6</version> 
        </dependency> 
       </dependencies> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <version>2.14</version> 
       <dependencies> 
       </dependencies> 
       <configuration> 
        <includes> 
         <include>**/*Test.java</include> 
        </includes> 
        <!-- Surefire 2.14+ configuration for parallelization --> 
        <forkCount>5</forkCount> 
        <reuseForks>false</reuseForks> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
+0

Cosa succede se si avvia i test in sequenza? Usa un'altra versione di 'junit',' surefire'? –

+0

Non molto dipendente dalla versione Surefire, ad esempio con 2.12.2 'Impossibile eseguire l'obiettivo org.apache.maven.plugins: maven-surefire-plugin: 2.12.2: test (default-test) sul progetto spock-webdriver : Esecuzione test di default dell'obiettivo org.apache.maven.plugins: maven-surefire-plugin: 2.12.2: test fallito: la macchina con codice a barre terminata senza dire correttamente addio. Arresto della macchina virtuale o System.exit chiamato? -> [Aiuto 1] ' –

+0

Immediatamente dopo aver aggiunto la dipendenza da spock si blocca per me. L'ho provato con il selenio e la dipendenza da junit e si costruisce. Dopo aver aggiunto la dipendenza da spock al mio pom non funziona. Ho provato anche diverse versioni di Spock –

risposta

1

tenta di utilizzare la versione 2.9 o superiore

<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-surefire-plugin</artifactId> 
<version>2.9</version> 
0

Non sono sicuro se questo è correlato, ma mi è stato in esecuzione in un errore "C'è stato un errore nel processo biforcuto" quando stavo eseguendo il mio test di Grails Spock in Maven. Si è scoperto che mi mancava un 's' nel mio nome del file:

MyCoolTest.groovy => MyCoolTests.groovy

6

Questo è un vecchio thread, ma per gli altri che potrebbe incorrere in questo problema ... Questo l'errore è causato da un'incoerenza con le dipendenze del plugin surefire e le dipendenze di spock 0.7.0. Spock utilizza surefire-junit47, versione 2.11. Questa classe/metodo, JUnit4RunListener.rethrowAnyTestMechanismFailures non esiste in quella versione infallibile. La soluzione è di escludere la versione infallibile dalla definizione Spock di dipendenza simile a questo:

<dependency> 
    <groupId>org.spockframework</groupId> 
    <artifactId>spock-maven</artifactId> 
    <version>0.7-groovy-2.0</version> 
    <exclusions> 
     <exclusion> <!-- exclude so we can pick up surefire-junit4 2.17 version for failsafe integration tests --> 
      <groupId>org.apache.maven.surefire</groupId> 
      <artifactId>surefire-junit47</artifactId> 
     </exclusion> 
    </exclusions> 
</dependency> 

Ora, userà la versione infallibile già definita, per completezza, ecco la dipendenza infallibile che uso:

<dependency> 
    <groupId>org.apache.maven.surefire</groupId> 
    <artifactId>surefire-junit4</artifactId> 
    <version>2.17</version> 
</dependency> 

E poi la definizione del plugin surefire che consente alle unità e ai test di integrazione di sparare separatamente (questa parte riguarda più i test delle unità, i test di integrazione, spock, maven e groovy per giocare bene).

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-surefire-plugin</artifactId> 
    <version>2.17</version> 
    <dependencies> 
     <dependency> 
      <groupId>org.apache.maven.surefire</groupId> 
      <artifactId>surefire-junit4</artifactId> 
      <version>2.17</version> 
     </dependency> 
    </dependencies> 
    <configuration> 
     <forkCount>0</forkCount> 
     <includes> 
      <include>%regex[.*Test.*]</include> 
     </includes> 
     <excludes> 
      <exclude>%regex[.*IntegrationTest.*]</exclude> 
     </excludes> 
    </configuration> 
</plugin> 

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-failsafe-plugin</artifactId> 
    <version>2.17</version> 
    <configuration> 
     <includes> 
      <include>%regex[.*IntegrationTest.*]</include> 
     </includes> 
    </configuration> 
    <executions> 
     <execution> 
      <id>failsafe-integration-tests</id> 
      <goals> 
       <goal>integration-test</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

Ora, unit test spareranno con l'obiettivo di test e test di integrazione possono essere lanciati in modo indipendente su richiesta del genere: fail-safe mvn: integrazione-test

+0

questo ci ha aiutato a risolvere il nostro problema. Grazie! – Steve

Problemi correlati