2011-07-05 42 views
33

我已經設法找出如何使一個TestSuite在JUnit 4中,但我真的很想念包裹在TestSetup一套房的V3可能性。的TestSuite設置在JUnit 4

任何想法,如何讓一些@ BeforeClass/@課餘設置爲JUnit 4中一套測試用例執行?

I.e.

@RunWith(Suite.class) 
@Suite.SuiteClasses({Test1.class, Test2.class}) 
public class MyTestSuite { 
    @BeforeClass public static void setUpClass() { 
     // Common initialization done once for Test1 + Test2 
    } 
    @AfterClass public static void tearDownClass() { 
     // Common cleanup for all tests 
    } 
} 

不幸的是,上面的代碼片段不起作用。 @BeforeClass僅適用於每個測試類的基礎。

+0

根據這個答案它應該工作:http://stackoverflow.com/questions/82949/before-and-after-suite-execution-hook-in-junit- 4-X#177069 – Sebi

回答

50

以下是我已經和它運行得很好。

import org.junit.AfterClass; 
import org.junit.BeforeClass; 
import org.junit.runner.RunWith; 
import org.junit.runners.Suite; 
import org.junit.runners.Suite.SuiteClasses; 

@RunWith(Suite.class) 
@SuiteClasses({ TestSuite1.class, TestSuite2.class }) 
public class CompleteTestSuite { 

    @BeforeClass 
    public static void setUpClass() {  
     System.out.println("Master setup"); 

    } 

    @AfterClass public static void tearDownClass() { 
     System.out.println("Master tearDown"); 
    } 

} 

這是我的測試套件1(對於測試套件2也是這樣做的)。

import org.junit.runner.RunWith; 
import org.junit.runners.Suite; 
import org.junit.runners.Suite.SuiteClasses; 

@RunWith(value = Suite.class) 
@SuiteClasses(value = { TestCase1.class }) 
public class TestSuite1 {} 

這裏是我的測試類。創建testcase1和testcase2。

import static org.junit.Assert.assertEquals; 

import org.junit.BeforeClass; 
import org.junit.Test; 

public class TestCase1 { 

    @BeforeClass 
    public static void setUpClass() {  
     System.out.println("TestCase1 setup"); 
    } 

    @Test 
    public void test1() { 
     assertEquals(2 , 2); 
    } 
}  

你應該有5類 completesuite suite1 suite2 test1的 test2的

,並確保有junit在您的構建路徑。這應該運行!

這裏是輸出

Master setup 
TestCase1 setup 
Master tearDown 
+0

什麼!它實際上有效!天啊,我不知道怎麼來的我無法得到它的工作昨天(可能只是一個錯誤在我的部分即可)。 – Rasmus

+0

真棒解決方案!即使在我自定義測試掃描器創建測試列表的場景中。 –