2013-05-28 34 views
11

câu hỏi của tôi rất giống với câu hỏi này: maven-failsafe-plugin Failures and BUILD SUCCESS?maven-failsafe-plugin Lỗi và BUILD THÀNH CÔNG?

và tôi quản lý để thiết lập plugin không an toàn để thất bại nếu kiểm tra thất bại.

Nhưng nếu thử nghiệm đi vào trạng thái lỗi, plugin không an toàn vẫn không phá vỡ bản dựng.

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

cho simplicy IntegrationTierFunctionalTestCase chỉ chứa mã này

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

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

nếu tôi bỏ ghi chú thất bại() toàn bộ xây dựng không đúng với xây dựng thất bại. nhưng nếu tôi chỉ ném một ngoại lệ, nó không thành công như được hiển thị ở trên.

cấu hình oour Plugin trông như thế này

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

tôi đang thiếu gì? Và không có tôi không muốn quấn nó trong các khối try-catch và kiểm tra lỗi bằng tay.

Trả lời

18

Bạn cần có hai khối thực thi, khiến mục tiêu xác minh của trình cắm maven-failsafe được dùng để kiểm tra kết quả của các kiểm tra tích hợp.

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

Ngoài ra, bạn nên cập nhật phiên bản của trình cắm maven-failsafe thành 2.14.1 thay vì 2.7. Cập nhật: Trong thời gian chờ đợi, hãy cập nhật lên 2.17.

+0

thanks a lot, mà làm việc, nhưng không phải trong 2,7 , vì vậy tôi phải cập nhật phiên bản như bạn đã đề cập – udik

+0

Như đã nêu trong [câu hỏi này] (http://stackoverflow.com/questions/12279160/maven-failsafe-plugin-failures-and-build-success) - "chính xác giải pháp là sử dụng failsafe như dự định. -test mục tiêu được thiết kế đặc biệt không để thất bại xây dựng. " Vì vậy, mặc dù thông tin này là chính xác, nó không phải là câu trả lời cho câu hỏi. – charneykaye

0

Vui lòng xác minh rằng thuộc tính maven "maven.test.failure.ignore" không được đặt thành "true" trong bất kỳ tệp pom.xml maven nào của bạn, vì nó có thể là lý do duy nhất để không dừng xây dựng sau khi kiểm tra thất bại.

+0

không, tôi không có bất kỳ cài đặt nào như vậy, tôi sẽ chấp nhận câu trả lời dưới đây – udik

0

Có thể có thêm lý do tại sao điều đó xảy ra. Kiểm tra Failsafe đang tìm kiếm các lớp kiểm tra và hy vọng chúng nằm trong $ {project.build.directory}/test-classes - nếu bạn có một thiết lập khác, nó sẽ chỉ in "No tests to run." và kết thúc nếu xây dựng thành công bất kể kết quả của giai đoạn thử nghiệm tích hợp là gì.

Bạn phải thiết lập testClassesDirectory trong cấu hình 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

Nếu bạn đang chạy thử nghiệm hội nhập như thế này:

mvn test-compile failsafe:integration-test 

Sau đó, bạn nên biết rằng theo maven documentation on failsafe:

Plugin Failsafe sẽ không làm hỏng bản dựng trong giai đoạn thử nghiệm tích hợp, do đó cho phép giai đoạn thử nghiệm tích hợp sau thực thi.

tôi đã có thể để có được xây dựng để thất bại như thế này:

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

Và đây là cấu hình chạy failsafe tôi để tham khảo:

 <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

Cảm ơn bạn. Tôi vừa thay đổi danh sách các mục tiêu để chạy khi thử nghiệm tích hợp, để thêm 'failsafe: verify' như bạn đề xuất, và nó hoạt động như dự định: FAILURE result thay vì SUCCESS. Đó là bước mất tích để làm cho nó hoạt động. – manuelvigarcia

+0

Đây là câu trả lời đúng. Chỉ 'failsafe: verify' là * được thiết kế * để làm cho việc xây dựng thất bại khi kiểm tra tích hợp thất bại. – charneykaye

+0

Ngoài ra, chỉ 'mvn verify' cũng sẽ tạo ra kết quả mong đợi. – charneykaye

Các vấn đề liên quan