2011-12-30 2 views
4

우리는 실행을 위해 maven에서 생성 된 프로필이 있습니다 Selenium junit4 유형 테스트 이하는 실행 태그가없는 스 니펫입니다.JUnit 4를 실행합니다. FailSafe 및 SureFire 플러그인과 병렬로 테스트합니다.

<profile> 
    <id>selenium-tests</id> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-failsafe-plugin</artifactId> 
       <version>2.11</version> 
       <dependencies> 
        <!-- Force using the latest JUnit 47 provider --> 
        <dependency> 
         <groupId>org.apache.maven.surefire</groupId> 
         <artifactId>surefire-junit47</artifactId> 
         <version>2.11</version> 
        </dependency> 
       </dependencies> 
       <configuration> 
        <parallel>classes</parallel> 
        <threadCount>5</threadCount> 
        <forkMode>pertest</forkMode> 
        <useManifestOnlyJar>false</useManifestOnlyJar> 
        <redirectTestOutputToFile>true</redirectTestOutputToFile> 
        <skip>false</skip> 
        <includes> 
         <include>**/regtests/*.java</include> 
        </includes> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</profile> 

그리고 내 TestClass는 이렇게 보입니다.

@RunWith(HTMLSourceDumperJUnit4Runner.class) //Our own Runner 
public class MyTestClass extends Assert { 

    private int x = 1; 
    private int y = 1; 

    @Test 
    public void testAddition() { 
     int z = x + y; 
     assertEquals(2, z); 
    } 

} 

이 테스트 클래스를 병렬 구성의 failsafe 플러그인 2.11을 통해 실행하면 다음 오류로 인해 실패합니다.

 
java.lang.Exception: No runnable methods 
    at org.junit.runners.BlockJUnit4ClassRunner.validateInstanceMethods(BlockJUnit4ClassRunner.java:171) 
    at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:115) 
    at org.junit.runners.ParentRunner.validate(ParentRunner.java:269) 
    at org.junit.runners.ParentRunner.(ParentRunner.java:66) 
    at org.junit.runners.BlockJUnit4ClassRunner.(BlockJUnit4ClassRunner.java:59) 
    at org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:13) 
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57) 
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29) 
    at org.junit.runner.Computer.getRunner(Computer.java:38) 
    at org.apache.maven.surefire.junitcore.ConfigurableParallelComputer.getRunner(ConfigurableParallelComputer.java:142) 
    at org.junit.runner.Computer$1.runnerForClass(Computer.java:29) 
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57) 
    at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:93) 
    at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:84) 
    at org.junit.runners.Suite.(Suite.java:79) 
    at org.junit.runner.Computer.getSuite(Computer.java:26) 
    at org.apache.maven.surefire.junitcore.ConfigurableParallelComputer.getSuite(ConfigurableParallelComputer.java:134) 
    at org.junit.runner.Request.classes(Request.java:69) 
    at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.execute(JUnitCoreWrapper.java:53) 
    at org.apache.maven.surefire.junitcore.JUnitCoreProvider.invoke(JUnitCoreProvider.java:140) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:188) 
    at org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:166) 
    at org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:86) 
    at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:101) 
    at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:74) 

여기에 누락 된 것이 있습니까? 이 게시물에 대한 정보가 뒤떨어지면 다시 게시하십시오.

+1

당신도 버전을 믹싱하고 있습니다. surefire-junit47 종속성은 failsafe 버전을 따라야합니다. 2.11 대신 2.8 – krosenvold

+0

고마워. 나는 이것을 시도하고 여전히 같은 오류를 보여줍니다. 최신 시도로 질문을 업데이트했습니다. – raksja

+0

2.10에서 2.11로 확실하게 업그레이드하면 위의 오류가있는 모든 단위 테스트가 중단됩니다. 새로운 병렬 작업을 시도하거나하지 않고 테스트 할 수 있습니다. 모든 테스트는 JUnit 4 형식 테스트로 2.10 이전 버전과 잘 작동합니다. 나는 2 시간 동안 그것을 알아 내려고 노력했다, 확실한 2.12까지 기다릴 시간이었다. 내가 비슷한 일을하고있는 것은 forkMode, useManifestOnlyJar 및 redirectOutputToFile 설정입니다. 아마도 그 중 일부 또는 전부에 대해 다른 설정을 시도해보십시오. –

답변

2

는 확실한 2.11에서 버그가 수 있도록이 나타납니다. 해당 기능을 원하지 않습니다.

<useManifestOnlyJar>false</useManifestOnlyJar> 

내가 버그를 제출했습니다. http://jira.codehaus.org/browse/SUREFIRE-819

+0

를 true로 설정하면 효과적입니다. Thats는 좋은 캐치 다. 스코트 감사합니다. – raksja

4

플러그인의 메이븐 문서에 따르면, 구체적으로 <includes> 태그입니다. 테스트 클래스 이름 패턴은 **/IT*.java, **/*IT.java**/*ITCase.java입니다. 따라서 클래스 이름을 MyIT 또는 MyITCase 또는 그와 비슷한 이름으로 변경하려고합니다.

http://maven.apache.org/plugins/maven-failsafe-plugin/integration-test-mojo.html#includes

+0

답장을 보내 주셔서 감사합니다. 나는 그것을 놓쳤다. 나는 그것을 시도했지만 여전히 같은 오류가 발생합니다. 가장 최근의 시도로 질문을 업데이트했습니다 .. – raksja

+0

@techastute 스택 추적은 확실한 패키지 만 있고, 안전하지 않은 패키지는 없으므로 문제가있을 수 있습니다. failsafe 구성에 포함 된 테스트를 제외 시키거나 확실한 작동 중지를 시도하십시오. – sblundy

관련 문제