2010-09-28 33 views
5

Tôi sử dụng giả định junit để quyết định có nên chạy thử nghiệm hay không.
Các thử nghiệm trong đó giả định thất bại là ignored/skipped bởi khung công tác junit.Tại sao một bài kiểm tra junit bị bỏ qua vì lỗi giả định không được báo cáo là bị bỏ qua?

Tôi tự hỏi tại sao các bài kiểm tra bị bỏ qua không được báo cáo là 'bị bỏ qua'?

hãy có một cái nhìn tại ví dụ:

import static org.junit.Assert.fail; 
import org.junit.Assume; 
import org.junit.Test; 

public class AssumptionTest { 

    @Test 
    public void skipAssumptionFailureTest() { 
     Assume.assumeTrue("foo".equals("bar")); 
     fail("This should not be reached!"); 
    } 
} 

Chạy thử nghiệm này trong một kết quả dự án maven trong:

Running AssumptionTest 
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.015 sec 

Tôi muốn có thử nghiệm này được báo cáo là 'bỏ qua'. Có cơ hội nào để đạt được điều này không?

(JUnit 4.8.1; 2.2.1 maven; java 1.6.0_21)

Trả lời

2

Bạn không thể làm out-of-the-box này là cách duy nhất để bỏ qua các bài kiểm tra là với @Ignore chú thích. Tuy nhiên, tôi tìm thấy một blog post mà có thể chỉ là những gì bạn đang tìm kiếm:

+0

Cảm ơn bạn đã trả lời. Quá tệ đến nỗi việc này không hoạt động. Thực hiện một Á hậu tùy chỉnh sẽ không làm việc cho tôi - Tôi thường đã sử dụng một Á hậu tùy chỉnh (SpringJUnit4ClassRunner) trong các bài kiểm tra của tôi mà tôi sẽ không mở rộng. Tôi đã có thể ưa thích một xây dựng trong giải pháp. – FrVaBe

+1

XIN thêm các phần quan trọng từ bài đăng trên blog dưới dạng câu trả lời, nếu không câu trả lời này sẽ hoàn toàn vô dụng ngay sau khi bài đăng blog đó biến mất. (Tôi ấn tượng không ai đề cập đến điều này trong 7 năm qua) –

2

Mùa xuân mang một biến thể khác của chú thích Bỏ qua, chú thích có thể quyết định trong thời gian chạy có bỏ qua thử nghiệm không: @IfProfileValue. Kết hợp với người dùng được cung cấp ProfileValueSource trong một @ProfileValueSourceConfiguration, bạn có thể thực hiện một số thủ thuật hạn chế.

Xem Spring Test Documentation.

Nhưng nó không giống như việc có thể thực hiện một số mã kiểm tra và ở giữa phương pháp thử nghiệm quyết định bỏ qua thử nghiệm, như bạn có thể với các giả định.

+0

Nhận xét tốt - chắc chắn hữu ích cho một số trường hợp sử dụng. – FrVaBe

+0

Lưu ý: Mùa xuân '@ IfProfileValue' chỉ ** bỏ qua/bỏ qua ** kiểm tra nếu tên và giá trị không khớp và không ** không chạy **. Nếu bạn muốn thực hiện JUnit Loại thực thi với điều này, bạn có thể cần phải kết thúc mở rộng 'SpringJUnit4ClassRunner # runChild' thành _not-run_ thay vì _ignoring_.Điều này chủ yếu là quan trọng nếu kết quả của nó là trong jenkins. – raksja

2

Trong khi câu trả lời trước đó là tốt cho riêng mình, tôi muốn giải quyết câu hỏi "WHY".

Sự cố bắt nguồn từ thực tế cách kiểm tra thất bại/bị bỏ qua đã được tính. Khi các giả định được thêm vào, các số đếm thông thường được loại bỏ một cách sai lệch (giả định có thể bỏ qua các bài kiểm tra một nửa trong suốt quá trình chạy).

Trình chạy công cụ cũng gặp sự cố với điều đó, gây ra báo cáo lộn xộn. Xem here for Surefire dev conversation with JUnit peoplehere for related Eclipse bug.

Hiện tại, đây không phải là vấn đề trong Maven và không được ở trong các Hình thức tối tân mới. Tôi sử dụng STS dựa trên eclipse.buildId = 2.9.2.201205071000-RELEASE và tôi vẫn gặp phải hành vi này.

EDIT: liên kết loại tham chiếu không hoạt động.

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