2012-12-14 30 views
10

Có thể chạy một phương pháp JUnit @Test trong một lớp học mà có một phương pháp chú thích với @Before, nhưng để bỏ qua những phương pháp @Before chỉ cho thử nghiệm này?Run Junit @Test mà bỏ qua @ Trước/@ Sau

Chỉnh sửa: Tôi quan tâm nếu JUnit hỗ trợ chức năng này, không phải cách giải quyết. Tôi biết cách giải quyết như di chuyển (các) thử nghiệm trong một lớp khác hoặc xóa chú thích và gọi thủ công setUp() trong mỗi phương pháp thử nghiệm.

Giả sử trong một lớp có 30 bài kiểm tra và 29 trong số đó @Before thực sự đơn giản hóa việc khởi tạo thử nghiệm, nhưng đối với một (hoặc nhiều hơn) trong số đó là vô dụng/nó làm phức tạp mọi thứ.

public class MyTestClass { 

    @Before 
    public void setUp() { 
     //setup logic 
    } 

    @Test 
    public void test1() { 
     //[...] 
    } 

    @Test 
    public void test2() { 
     //[...] 
    } 

    //more tests here 

    @Test(ignoreBefore = true, ignoreAfter = true //false by default) 
    //something equivalent to this 
    public void test20() { 
     //[...] 
    } 

} 
+0

Bạn có thể di chuyển 'test20' trong lớp riêng biệt mà không có chú thích' @ Before' và '@ After' không? – user1516873

+0

@ user1516873 Về mặt kỹ thuật có, nhưng tôi muốn giữ tất cả các bài kiểm tra cho một lớp trong một lớp thử nghiệm duy nhất. Khi lớp được thiết kế/phát triển, thử nghiệm không được xem xét và tái cấu trúc cũng không phải là một giải pháp. Ngoài ra, định nghĩa các bài kiểm tra đơn vị nói rằng chúng độc lập và có thể chạy riêng. – m3th0dman

Trả lời

5

Bạn có thể thực hiện việc này bằng TestRule. Xem câu trả lời của tôi cho Exclude individual test from 'before' method in JUnit. Về cơ bản, triển khai thực hiện ExternalResource và trong phương pháp áp dụng, hãy kiểm tra xem có chú thích cụ thể nào trên phương pháp hay không và nếu có, không chạy phương thức trước/sau. Bạn sẽ phải gọi cụ thể trước/sau từ quy tắc của bạn.

2

Nếu vô dụng thì không phải là vấn đề - nó có gây hại cho việc thiết lập lại lần nữa không?

Tuy nhiên tôi không nghĩ rằng điều đó có thể xảy ra và tìm kiếm tôi như một tính năng làm tê liệt.

Cách tiếp cận khác - di chuyển thử nghiệm đó đến một lớp thử nghiệm riêng biệt.

+1

+1 Tôi chắc chắn sẽ sai ở bên cạnh lớp kiểm tra riêng biệt. Rõ ràng các bài kiểm tra khác có điểm tương đồng yêu cầu chúng được nhóm lại với nhau. Thử nghiệm kỳ quặc của bạn không. –

+0

Tôi thực sự tò mò nếu JUnit cung cấp chức năng này, không phải cách giải quyết. Tại sao nó trông giống như một tính năng làm tê liệt? Không phải trong định nghĩa cơ bản của một đơn vị kiểm tra ý tưởng rằng các xét nghiệm đơn vị phải hoàn toàn độc lập với nhau? Các xét nghiệm khác không nên quan tâm nếu một số người trong số họ gọi phương pháp @Trước khi những người khác thì không. – m3th0dman

+0

@ m3th0dman đây không phải là sự phụ thuộc giữa các thử nghiệm, nhưng phụ thuộc từ ngữ cảnh của thử nghiệm. Bài kiểm tra được đặt trong một lớp học với phương pháp setUp. Tại sao nó không được thực hiện sau đó? Trông rất ngạc nhiên. Bất ngờ trong phát triển phần mềm là khó chịu. – kan

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