2013-03-20 111 views
9

Ich habe ein Problem beim Ausführen von JUnit Tests parallel bei der Verwendung von JUnit, Groovy, Spock und Maven. Wenn sie ausgeführt wird, erhalte ich die folgende nach Prüfung bestanden werden erfolgreich:JUnit + Maven + Paralleltest Ausführungsfehler

[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 

Bei der Aktivierung in meinem pom.xml Junit 47 Provider mit zwingen, bekomme ich das:

[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 

Die pom.xml sieht aus wie diese

<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

Was passiert, wenn Sie nacheinander Ihre Tests starten? Benutze eine andere Version von 'junit',' todsicheren'? –

+0

Nicht viel abhängig von Surefire Version Ich bekomme zum Beispiel mit 2.12.2 'Fehler beim Ausführen des Ziels org.apache.maven.plugins: maven-surefire-plugin: 2.12.2: Test (Standard-Test) auf Projekt spock-webdriver : Ausführung Standard-Test des Ziels org.apache.maven.plugins: maven-surefire-plugin: 2.12.2: Test fehlgeschlagen: Die gegabelte VM wurde beendet, ohne richtig zu sagen, auf Wiedersehen. VM-Absturz oder System.exit aufgerufen? -> [Hilfe 1] ' –

+0

Unmittelbar nach dem Hinzufügen der Spock-Abhängigkeit stürzt es für mich ab. Ich habe es mit Selen und Junit-Abhängigkeit versucht und es baut. Nach dem Hinzufügen von Spock-Abhängigkeit zu meinem POM funktioniert es nicht. Versucht auch mehrere Spock-Versionen –

Antwort

1

Try Version 2.9 oder höher

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

Ich bin mir nicht sicher, ob das verwandt ist, aber ich lief in einem "Es gab einen Fehler in der Gabel Prozess" Fehler, wenn ich meinen Grails Spock-Test in Maven ausgeführt wurde. Es stellte sich heraus, dass ich ein ‚s‘ in meinem Dateiname fehlt:

MyCoolTest.groovy => MyCoolTests.groovy

6

Dies ist ein alter Thread, aber für andere, die in dieses Problem könnte ... Diese Der Fehler wird aufgrund einer Inkonsistenz mit den Abhängigkeiten des todsicheren Plugins und den Abhängigkeiten von spock 0.7.0 verursacht. Spock verwendet surefire-junit47, Version 2.11. Diese Klasse/Methode, JUnit4RunListener.rethrowAnyTestMechanismFailures, existiert in dieser todsicheren Version nicht. Die Lösung ist die todsichere Version von der spock Abhängigkeit Definition wie folgt auszuschließen:

<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> 

Nun wird es die todsichere Version verwenden Sie definiert haben, der Vollständigkeit halber, hier ist die todsichere Abhängigkeit ich benutze:

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

Und dann die todsichere Plugin-Definition, die Einheit und Integration Tests separat auslösen können (dieser Teil ist mehr über Komponententests, Integrationstests, Spock, Maven und groovy, um schön zu spielen).

<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> 

Nun Unit-Tests werden mit dem Testziel und Integrationstests abfeuern können, wie dies unabhängig auf Anfrage gestartet werden: mvn ausfallsicher: Integration-Test

+0

das half uns, unser Problem zu lösen. Vielen Dank! – Steve

Verwandte Themen