2012-12-13 67 views
5

Tôi có một lớp kiểm tra Junit với nhiều phương thức @Test trong đó mà tôi cần chạy theo thứ tự. Nếu có một ngoại lệ được ném vào một phương thức tôi muốn dừng toàn bộ trường hợp thử nghiệm và lỗi, nhưng tất cả các phương thức thử nghiệm còn lại đang chạy.Lớp kiểm tra Junit với nhiều phương thức @Test

public class{ 

@Test{ 
//Test1 method`enter code here` 
} 

@Test{ 
//Test2 method 
} 

@Test{ 
//Test3 method 
} 

} 

Nếu phương pháp Test1 thất bại thì đừng chạy thử nghiệm khác

Lưu ý: Tất cả đều là thử nghiệm độc lập

Trả lời

9

Unit tests nên được thiết kế để chạy độc lập với nhau. Thứ tự thực hiện không thể được đảm bảo. Bạn nên thiết kế lại lớp thử nghiệm của mình để thứ tự không quan trọng.

Nếu không có thêm thông tin, bạn khó có thể tư vấn cho bạn cụ thể. Nhưng nó có thể giúp để có một phương pháp @before, kiểm tra một số điều kiện tiên quyết trước khi chạy từng thử nghiệm. Nếu bạn đã bao gồm cuộc gọi phương thức Assume.assumeTrue(...) thì thử nghiệm của bạn có thể bị bỏ qua nếu điều kiện không thành công?

2

Nếu bạn cần hệ quả để được lưu giữ và thất bại trong việc kiểm tra không làm hỏng toàn bộ tập hợp, hãy đặt tất cả các thử nghiệm đó vào một và thử nghiệm bằng giả định.

8

Khi được phân loại here, JUnit 4.11 hỗ trợ thực thi theo thứ tự với chú thích @FixMethodOrder, nhưng các phương thức khác là đúng, tất cả các thử nghiệm phải độc lập với nhau.

Khi kết thúc thử nghiệm, bạn có thể đặt cờ thành công toàn cầu. Lá cờ này sẽ được kiểm tra vào đầu mỗi thử nghiệm. Nếu cờ không được đặt trước khi kết thúc một bài kiểm tra (vì nó không thành công trước khi kết thúc), tất cả các bài kiểm tra khác cũng sẽ thất bại. Ví dụ:

@FixMethodOrder(MethodSorters.NAME_ASCENDING) 
public class ConsecutiveFail{ 
    private boolean success = true; 

    @Test 
    public void test1{ 
    //fist two statements in all tests 
    assertTrue("other test failed first", success); 
    success = false; 
    //do your test 
    //... 

    //last statement 
    success = true; 
    } 

    @Test 
    public void test2{ 
    //fist two statements in all tests 
    assertTrue("other test failed first", success); 
    success = false; 
    //do your test 
    //... 

    //last statement 
    success = true; 
    } 
} 
1

Dưới đây là ví dụ cho TestNG làm thế nào để xác định kiểm tra để chạy:

@Test(priority = 1) 
public void test1(){} 

@Test(priority = 2) 
public void test2(){} 

@Test(priority = 3) 
public void test3(){} 
Các vấn đề liên quan