2012-04-13 28 views
23

Tôi có thư mục mặc định src/test/java cho các bài kiểm tra đơn vị của chúng tôi. Một thư mục riêng biệt src/integration/java có sẵn cho các bài kiểm tra tích hợp.Làm thế nào để thêm một thư mục nguồn thử nghiệm khác vào Maven và biên dịch nó vào một thư mục riêng biệt?

Tôi đã định cấu hình maven-surefire-plugin để thực hiện kiểm tra đơn vị/tích hợp trong các giai đoạn tương ứng. Điều này làm việc tuyệt vời khi các lớp được biên dịch nằm trong thư mục chính xác. Thật không may Maven chỉ hỗ trợ một thư mục nguồn thử nghiệm và một thư mục đầu ra thử nghiệm.

Với plugin xây dựng trình trợ giúp mavens Tôi có thể thêm một thư mục nguồn thử nghiệm khác nhưng các lớp được biên dịch sẽ được tạo thành test-classes nhưng tôi muốn biên dịch các lớp từ src/integration/java thành target/integration-test-classes. Điều này có thể không?

src/test/java > target/test-classes 
src/integration/java > target/integration-test-classes 

PS: Tôi không thích điều này loại trừ/bao gồm trên giải pháp trọn gói cơ bản (loại trừ tất cả **/it/** tập tin từ giai đoạn thử nghiệm mặc định, và loại trừ tất cả **/unit/** từ giai đoạn hội nhập

+1

Di chuyển các thử nghiệm tích hợp của bạn thành một mô-đun maven riêng biệt. –

Trả lời

10

Xin lỗi, không có. Khái niệm này là chỉ có một thư mục đích cho các lớp được biên dịch và một cho các lớp kiểm tra được biên dịch (thậm chí lược đồ thẻ <build> cho thấy điều này) .Thực sự, tôi không thực sự nghĩ Maven khuyến khích thiết kế thẳng, sạch sẽ và dễ đọc của ứng dụng của bạn, bằng cách sử dụng các mô-đun được chế tác tốt.

Nếu nghĩ rằng những gì bạn thực sự muốn làm là thực sự tạo mô-đun thử nghiệm tích hợp. Đó là thực tế phổ biến, trên thực tế. Cho đến nay tôi luôn có mô-đun thử nghiệm tích hợp riêng biệt và không bao giờ gặp vấn đề với điều đó. Tất nhiên bạn nên phụ thuộc vào tất cả các mô-đun cần thiết để chạy các thử nghiệm này. Bạn thậm chí có thể phụ thuộc vào các lớp học thử nghiệm khác mô-đun bằng cách sử dụng <type>test-jar</type> với tuyên bố sự phụ thuộc của bạn như đã đề cập ở đây:

http://maven.apache.org/guides/mini/guide-attached-tests.html

tôi không thích phương pháp này, tuy nhiên, và thường thích có mô-đun riêng biệt với các công cụ thử nghiệm hỗ trợ , giống như các lớp cơ sở cho các trường hợp kiểm tra JUnit, v.v.

30

Dựa vào nội dung bạn đã viết có vẻ như bạn không đặt tên cho bài kiểm tra tích hợp của mình một cách chính xác và bạn không sử dụng maven-failsafe-plugin cho bài kiểm tra tích hợp. Dựa trên quy ước của maven-failsafe-plugin, bạn nên đặt tên cho các bài kiểm tra tích hợp của mình như *IT.java. Nếu bạn đặt tên thử nghiệm hội nhập của bạn một cách thích hợp, bạn có thể xử lý rằng với một cấu hình nhiều hơn hoặc ít hơn như thế này:

<project ...> 
    [...] 
    <build> 
    [...] 
    <plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>build-helper-maven-plugin</artifactId> 
     <version>1.9.1</version> 
     <executions> 
      <execution> 
      <id>add-test-source</id> 
      <phase>generate-test-sources</phase> 
      <goals> 
       <goal>add-test-source</goal> 
      </goals> 
      <configuration> 
       <sources> 
       <source>src/integration/java</source> 
       </sources> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
     [...] 
    </build> 
    [...] 
</project> 

Với trên nó có thể giữ các cuộc thử nghiệm tích hợp trong các mô-đun tương tự. Nhưng điều này sẽ không giải quyết được ý tưởng có các lớp kiểm tra tích hợp được biên dịch thành một thư mục riêng biệt.

Đôi khi tốt hơn nên có một mô-đun thử nghiệm tích hợp riêng biệt chỉ chứa các kiểm tra tích hợp (kết quả là có bản dựng nhiều mô-đun). Nếu bạn muốn rời khỏi các quy ước của Maven, bạn có thể thử cấu hình trình biên dịch-maven-plugin để sử dụng một đường dẫn đầu ra khác (ví dụ: target/integration-tests/classes) mà không nghĩ rằng nó sẽ thực sự hoạt động.

+1

Dựa trên câu trả lời này https://github.com/alimate/maven-source-sets –

5

Nếu bạn chỉ muốn thay đổi thư mục nguồn đơn vị kiểm tra (chứ không phải thêm là một bổ sung), chỉ cần thay đổi testSourceDirectory yếu tố:

<build> 
    <testSourceDirectory>${project.basedir}/src/test/groovy</testSourceDirectory> 

này rất hữu ích nếu tất cả các bài kiểm tra đơn vị của bạn được viết bằng groovy . (Nhưng bạn cũng sẽ cần cấu hình maven để biên dịch mã groovy của bạn quá - xem groovy-eclipse-maven-plugin hoặc build-helper-maven-plugin.)

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