2011-07-05 45 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

真棒解决方案!即使在我自定义测试扫描器创建测试列表的场景中。 –