2013-01-02 72 views
5

我想寫一個BaseTest類,只是提供了一個「通用setUp()法」爲所有擴展子類:的JUnit基礎測試自動設置

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

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

然後:

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

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

那麼理想,每次執行由@Test註解的子類方法時,JUnit都會首先調用BaseTest#setUp()方法,該方法執行任何操作(並不重要)。也許它將某些模擬狀態重置爲初始值,以便每次測試都可以從「乾淨的狀態」開始,等等。再次,並不重要。

不幸的是,當我運行這段代碼,我只看到setUp() was called!打印屏幕一次,這麼清楚BaseTest不是「捆綁」我的@Test方法就是我想要的。有什麼辦法可以做到這一點?提前致謝!

回答

13

我只是跑這個和兩個測試方法都被調用,並且兩次調用setUp。

如果在派生類中還有@Before註釋方法,那麼您需要將基類設置方法命名爲不同的例如setUpBase()因爲如果方法名稱相同,只會調用派生類中的註釋方法,因爲它將重寫基類中的方法。

+0

Thanks @Bedwyr Humphreys(+1) - 我將我的'fail()'語句改爲分號(強制測試方法通過),是的,父'setUp()'方法被調用兩次。所以必須有一些關於使用這個設置結合失敗的測試用例,導致'setUp()'方法只能被調用一次。再次感謝。 – IAmYourFaja

+0

我用fail()(在Eclipse中)運行它,它仍然被調用兩次。 – blank

+0

奇怪...沒關係,刪除'fail()'的作品,所以我很好。再次感謝。 – IAmYourFaja