2013-01-02 50 views
5

Tôi muốn viết một lớp BaseTest mà chỉ đơn giản cung cấp một "phổ biến phương pháp setUp()" cho tất cả các lớp con mở rộng:JUnit thử nghiệm cơ sở Auto Setup

public class BaseTest { 
    @Before 
    public void setUp() { 
     System.out.println("setUp() was called!"); 

     // Doesn't really matter what this is doing... 
     EnvironmentConfigurator.configureEnvForTesting(); 
    } 
} 

Sau đó:

public class WidgetTest extends BaseTest { 
    @Test 
    public void test1() { 
     fail(); 
    } 

    @Test 
    public void test2() { 
     fail(); 
    } 
} 

Vì vậy, lý tưởng, mỗi khi một phương thức phân lớp được chú thích bởi @Test được thực hiện, JUnit trước tiên sẽ gọi phương thức BaseTest#setUp(), thực hiện bất cứ điều gì (không quan trọng). Có lẽ nó đặt lại một số trạng thái mô phỏng thành một giá trị ban đầu để mỗi thử nghiệm có thể bắt đầu trên một "slate sạch", vv Một lần nữa, không thực sự quan trọng.

Thật không may khi tôi chạy mã này, tôi chỉ nhìn thấy setUp() was called! in ra màn hình lần, vì vậy rõ ràng BaseTest không phải là "gói" @Test phương pháp của tôi theo cách tôi muốn. Có bất kì cách nào để đạt được điều này không? Cảm ơn trước!

Trả lời

13

Tôi chỉ chạy điều này và cả hai phương pháp thử nghiệm được gọi và cả hai lần thiết lập được gọi.

Nếu bạn có phương thức được chú thích là @Before trong lớp dẫn xuất thì bạn sẽ cần phải đặt tên cho phương thức thiết lập lớp cơ sở cho một phương pháp khác, ví dụ: setUpBase() bởi vì nếu tên phương thức giống nhau, phương thức chú thích @Before trong lớp dẫn xuất được gọi là nó sẽ ghi đè phương thức trong lớp cơ sở.

+0

Cảm ơn @Bedwyr Humphreys (+1) - Tôi đã thay đổi các câu lệnh 'fail()' thành dấu chấm phẩy (để buộc các phương thức thử nghiệm vượt qua) và có, phương thức 'setUp()' cha được gọi hai lần. Vì vậy, phải có một cái gì đó về việc sử dụng thiết lập này kết hợp với các trường hợp thử nghiệm thất bại gây ra phương thức 'setUp()' chỉ được gọi một lần. Cảm ơn một lần nữa. – IAmYourFaja

+0

Tôi chạy nó với thất bại() (trong Eclipse) và nó vẫn được gọi hai lần – blank

+0

Lạ ... cũng không quan trọng, việc loại bỏ 'fail()' s làm việc vì vậy tôi tốt để đi. Cảm ơn một lần nữa. – IAmYourFaja

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