2012-05-08 23 views
17

Tôi có một cái bình trong kho chứa maven chứa test junit, nó sẽ được chạy trong các dự án khác nhau, vì nó có thể kiểm tra dự án và kiểm tra một số tính năng của nó. May mắn thay, chắc chắn không nhận được các xét nghiệm được chứa trong một cái lọ, vì đây là Feature Request shows.Chạy JUnit Tests chứa trong jar phụ thuộc sử dụng Maven Surefire

Trong yêu cầu tính năng, chúng đề xuất giải nén bình để sau đó được thực hiện bởi chắc chắn.

Tôi đã mở gói thành công jar bằng cách sử dụng plugin phụ thuộc maven, nhưng các thử nghiệm đã chứa vẫn chưa được thực thi. Đây là cách tôi định cấu hình plugin phụ thuộc maven để giải nén jar của tôi:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>unpack</id> 
      <phase>process-test-classes</phase> 
      <goals> 
       <goal>unpack</goal> 
      </goals> 
      <configuration> 
       <artifactItems> 
        <artifactItem> 
         <groupId>de.mwx.test</groupId> 
         <artifactId>selenium-test-base</artifactId> 
         <version>0.1</version> 
         <overWrite>true</overWrite> 
          <outputDirectory> 
           ${project.build.directory}/classes 
          </outputDirectory> 
        </artifactItem> 
       </artifactItems> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

Bất kỳ trợ giúp nào sẽ được đánh giá cao.

+1

Tại sao các xét nghiệm trong lọ khác? Họ có thử nghiệm cho dự án của bạn hay cái khác không? Nếu khác, tại sao bạn chạy chúng? Nếu cho ứng dụng của bạn, tại sao chúng không nằm trong dự án của bạn? –

+0

Bình khác thực sự là một khung kiểm thử hoạt động trên dự án hiện tại và thực thi các nhiệm vụ khác. Dường như với tôi giống như cách mô-đun nhất: Nhưng nó không phải là mục đích sử dụng cho chắc chắn, tôi đoán vậy. – devsnd

+1

Nhưng các dự án maven đã xác định một tiêu chuẩn cho các bài kiểm tra của dự án. Và IMO nó không có ý nghĩa để làm cho một dự án phụ thuộc vào các bài kiểm tra của nó - nếu bất cứ điều gì, các bài kiểm tra sẽ phụ thuộc vào mô-đun đang được kiểm tra, vì các bài kiểm tra sử dụng mô-đun, nhưng không ngược lại. –

Trả lời

28

Có một cách mới để chạy thử nghiệm trong maven từ một lọ khác. từ maven-surefire-plugin phiên bản 2.15 bạn có thể nói với maven để quét các lọ thử nghiệm của bạn để kiểm tra và chạy chúng. Bạn không cần trích xuất các bình thử nghiệm. Chỉ cần thêm một phụ thuộc vào lọ thử nghiệm của bạn và:

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <version>2.15</version> 
     <configuration> 
      <dependenciesToScan> 
       <dependency>test.jar.group:test.jar.artifact.id</dependency> 
      </dependenciesToScan> 
     </configuration> 
    </plugin> 

Đã công cụ này từ https://gist.github.com/aslakknutsen/4520226https://issues.apache.org/jira/browse/SUREFIRE-569

+0

Làm việc hoàn hảo, cảm ơn bạn đã bổ sung này. –

+1

Làm việc như một sự quyến rũ! Ngay cả khi chỉ định phụ thuộc vào bình thử nghiệm (với kiểm tra) – mac

1

Như được mô tả trong vấn đề bạn cần có một Suite có trong dự án của bạn KHÔNG nằm trong bình thử nghiệm.

+0

Vâng, đó là những gì dự án tôi đang nói đến. Tôi sẽ cập nhật câu hỏi của mình để làm cho điểm đó rõ ràng hơn. – devsnd

+1

Tôi khuyên bạn nên sử dụng thư mục lớp thử nghiệm thay vì thư mục lớp như outputDirectory. – khmarbaise

+0

CÓ! Điều đó là vậy đó. Cảm ơn bạn. – devsnd

2

(Đây chỉ là trình bày lại những gì có trong một bình luận trên từ khmarbaise, nhưng vì nó không được làm rõ, tôi nghĩ rằng nó có giá trị tái khẳng định):

Sử dụng thư mục thử nghiệm lớp học thay vì thư mục lớp học như outputDirectory :

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>unpack</id> 
      <phase>process-test-classes</phase> 
      <goals> 
       <goal>unpack</goal> 
      </goals> 
      <configuration> 
       <artifactItems> 
        <artifactItem> 
         <groupId>de.mwx.test</groupId> 
         <artifactId>selenium-test-base</artifactId> 
         <version>0.1</version> 
         <overWrite>true</overWrite> 
          <outputDirectory> 
           ${project.build.directory}/test-classes 
          </outputDirectory> 
        </artifactItem> 
       </artifactItems> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
Các vấn đề liên quan