2013-04-03 13 views
6

Tôi có mã plugin này trong tệp pom.xml của mình. Nếu tôi xóa plugin này thì Maven sẽ không chạy thử nghiệm đơn vị hai lần. Tôi chỉ muốn biết phần nào của plugin này làm cho các bài kiểm tra đơn vị chạy hai lần.Maven chạy thử nghiệm đơn vị hai lần với plugin clover

<plugin> 
    <groupId>com.atlassian.maven.plugins</groupId> 
    <artifactId>maven-clover2-plugin</artifactId> 
    <version>3.0.4</version> 
    <configuration> 
     <licenseLocation>/location/to/clover.license</licenseLocation> 
     <generateXml>true</generateXml> 
     <generateHtml>true</generateHtml> 
    </configuration> 
    <executions> 
     <execution> 
      <phase>generate-sources</phase> 
      <goals> 
       <goal>instrument</goal> 
      </goals> 
     </execution> 
     <execution> 
      <id>main</id> 
      <phase>verify</phase> 
      <goals> 
       <goal>instrument</goal> 
       <goal>aggregate</goal> 
       <goal>clover</goal> 
      </goals> 
     </execution> 
     <execution> 
      <id>site</id> 
      <phase>pre-site</phase> 
      <goals> 
       <goal>instrument</goal> 
       <goal>aggregate</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

Trả lời

7

Plugin clover sẽ kéo dài vòng đời lên giai đoạn test bằng cách sử dụng đường dẫn lớp được thiết kế.

vòng đời tiêu chuẩn của bạn sẽ chạy các bài kiểm tra (thường sử dụng chắc chắn hơn trong giai đoạn test, nhưng có thể có nhiều hành hoặc plugin thử nghiệm khác gọi kiểm tra trong giai đoạn đó)

Sau đó clover đến cùng và yêu cầu họ được chạy lại.

Bây giờ cho cảnh báo tiêu chuẩn của tôi:

  • Mã bảo hiểm sẽ thay đổi mã byte đó được thực hiện theo những cách hợp pháp theo đặc tả JVM.
  • Biến đổi như vậy có thể dẫn đến việc bổ sung các điểm đồng bộ trong khi cập nhật bản đồ phủ sóng.
  • Các điểm đồng bộ hóa bổ sung như vậy có thể hạn chế sắp xếp lại các hoạt động mà JVM có thể thực hiện.
  • Có những thay đổi khác không liên quan đến luồng, nhưng khá phức tạp để giải thích.

Nếu bạn chỉ bao giờ chạy các trường hợp thử nghiệm của bạn với bảo hiểm bật, bạn có thể không tin tưởng một tốc độ vượt qua 100% như bảo hiểm có thể che giấu lỗi

Ngược lại, nếu bạn không bao giờ chạy với vùng phủ sóng bật, bất kỳ sự thay đổi trong Kiến trúc JVM có thể làm nổi bật các lỗi mới mà bạn không biết.

  • thử đi có và không có bảo hiểm bật => có lẽ là ok

  • thử đi với bảo hiểm bật, thất bại khi tắt => hãy cẩn thận, lỗi ở đây

  • thử đi với bảo hiểm quay tắt, thất bại khi on => nếu thử nghiệm không phải là thời gian quan trọng sau đó lỗi ở đây, nhưng nếu thử nghiệm chạy trên môi trường sản xuất lỗi chỉ có thể hiển thị khi -server hoàn toàn tối ưu hóa đường dẫn nóng

  • T est không có và không có bảo hiểm bật => lỗi

"quy tắc vàng Stephen: Just run the damn tests twice"

+0

Điều này cụ thể cho Clover? Hay tất cả các công cụ thiết bị đo đạc phải làm điều này? – Yamcha

+0

Không cụ thể cho Clover. Lời khuyên của tôi là chạy các bài kiểm tra hai lần, nhưng mọi người có thể làm và bỏ qua lời khuyên này (với sự nguy hiểm của chính họ). JavaCoCo có lẽ là dễ nhất để cấu hình để chạy các bài kiểm tra một lần duy nhất ... với tất cả những rủi ro tôi đề cập đến –

0

Các clover2: Mục tiêu cụ bạn đang sử dụng tác phẩm theo cách như vậy mà nó Forks một chu kỳ xây dựng cuộc sống song song . Nhờ tất cả các tạo tác này được tạo ra trong quá trình xây dựng (các lớp, các lọ, vv) được đặt trong thư mục/target/clover hoặc có hậu tố -clover.jar. Điều này đảm bảo rằng bạn có một sự tách biệt giữa mã "bình thường" của bạn (ví dụ: không được thiết kế riêng) và mã được thiết kế.

Nếu bạn không cần phân tách như vậy (ví dụ bạn chạy "kiểm tra mvn" chứ không phải "triển khai mvn"), thì tôi khuyên bạn nên sử dụng clover2: setup thay vì clover2: instrument.

http://docs.atlassian.com/maven-clover2-plugin/latest/setup-mojo.html