2013-01-12 4 views
1

maven 프로파일의 사전 통합 테스트 단계에서 glassfish 인스턴스를 시작하도록 Cargo를 설정했습니다. 내 테스트는 통합 테스트 단계에서 실행되고, 마지막으로 통합 테스트 후 단계에서화물은 tomcat 인스턴스를 종료합니다.통합 테스트가 실패한 경우 Cargo를 통한 Glassfish 컨테이너가 maven에 의해 중지되지 않음

모든 테스트가 통과되면 좋지만 테스트에 실패하면 maven 빌드가 실패하고 통합 통합 테스트 후 단계에 도달하지 않아 glassfish 인스턴스가 실행 중 상태가됩니다. 그것은 과정을 죽이지 않고).

내가 잘못 했나요? 통합 테스트 단계가 실패하더라도화물이 내 글래스 피시 인스턴스를 종료하도록하는 방법이 있습니까?

내 받는다는 프로파일 : 문제는 단순히 단위 테스트하지만, 통합 테스트에 대한 하지와 관련하여 사용하기위한 것입니다 받는다는 - 확실한 - 플러그인의 잘못된 사용에 기반

<profile> 
    <!-- run integration tests against the app deployed to a container --> 
    <id>integration</id> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-surefire-plugin</artifactId> 
       <executions> 
        <execution> 
         <phase>integration-test</phase> 
         <goals> 
          <goal>test</goal> 
         </goals> 
         <configuration> 
          <!-- override the exclusion and include integration tests --> 
          <excludes> 
           <exclude>none</exclude> 
          </excludes> 
          <includes> 
           <include>***IntegrationTest.java</include> 
          </includes> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 

      <plugin> 
       <groupId>org.codehaus.cargo</groupId> 
       <artifactId>cargo-maven2-plugin</artifactId> 
       <version>${cargo.plugin.version}</version> 
       <executions> 
        <execution> 
         <id>start-server</id> 
         <phase>pre-integration-test</phase> 
         <goals> 
          <goal>start</goal> 
         </goals> 
        </execution> 
        <execution> 
         <id>stop-server</id> 
         <phase>post-integration-test</phase> 
         <goals> 
          <goal>stop</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <container> 
         <containerId>glassfish3x</containerId> 
         <artifactInstaller> 
          <groupId>org.glassfish.main.distributions</groupId> 
          <artifactId>glassfish</artifactId> 
          <version>${glassfish.version}</version> 
         </artifactInstaller> 
        </container> 
        <configuration> 
         <properties> 
          <cargo.datasource.datasource.mysql> 
           cargo.datasource.jndi=jdbc/TrackerPool| 
           cargo.datasource.driver=com.mysql.jdbc.Driver| 
           cargo.datasource.url=jdbc:mysql://localhost/[database]| 
           cargo.datasource.transactionsupport=LOCAL_TRANSACTION| 
           cargo.datasource.username=[username]| 
           cargo.datasource.password=[password] 
          </cargo.datasource.datasource.mysql> 
         </properties> 
        </configuration> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</profile> 

답변

2

. 이러한 목적으로 귀하의 문제를 해결할 수있는 maven-failsave-plugin이 존재합니다.

maven-failsave-plugin을 사용하면 include rule for integration tests이라는 정의가 해제됩니다.

IT*.java 
*IT.java 
*ITCase.java 

그래서 난 당신이 exlude의 어떤 종류를 필요가 없습니다 그에 따라 통합 테스트의 이름을 제안

는 /도에 대한 받는다는 - 확실한 - 플러그인 규칙을 포함 : 통합 테스트에 대한 메이븐의 일반적인 이름 지정 규칙은 다음과 같이이다 (단위 테스트) 또는 maven-failsafe-plugin (통합 테스트)에 대해서도 마찬가지입니다.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-failsafe-plugin</artifactId> 
    <version>2.13</version> 
    <executions> 
     <execution> 
      <goals> 
       <goal>integration-test</goal> 
       <goal>verify</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

통합 목표 테스트가 실패한 경우 빌드를 실패하는 경우에만 확인 목표가 필요합니다. 다음과 같이 Maven을 호출해야합니다.

mvn -Pprofile clean verify 
+0

아, 환상적입니다. 도와 주셔서 감사합니다. –