35

I've managed to find out how to make a TestSuite in jUnit 4, but I really miss the v3 possibility of wrapping a suite in a TestSetup.

Any ideas as to how to get some @BeforeClass/@AfterClass setup executed for a suite of test cases in 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
    }
}

Unfortunately the above code fragment doesn't work. @BeforeClass only works on a per-test-class basis.

4

1 に答える 1

52

これが私が持っているもので、問題なく動作します。

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
于 2011-07-05T22:35:30.270 に答える