@BeforeClass注释在动态创建的Test Suite中不起作用

时间:2014-07-02 21:01:08

标签: java unit-testing junit

我没有 JUnit Tests ,我想决定在运行时使用哪一个。我在SO处查看了之前的答案,最后我动态创建了测试套件。

这个类是我的应用程序启动的地方。我有 CustomTestSuite 类, Main 类将测试添加到我的自定义套件中。

public class Main {

    public static junit.framework.TestSuite suite()
    {
        CustomTestSuite suite = new CustomTestSuite();

        suite.addTest(new JUnit4TestAdapter(BTest.class));
        suite.addTest(new JUnit4TestAdapter(ATest.class));

        return suite;
    }
}

CustomTestSuite.java

public class CustomTestSuite extends TestSuite {

    @BeforeClass
    public static void setUp() throws Exception {
        System.out.println("Before class test");
    }

    @After
    public void tearDown() throws Exception {
        System.out.println("After class test");
    }

}

我的 ATest BTest 是简单的测试类,我只会将 ATest 显示为示例:

public class ATest{

    @Test
    public void testMethod() {
        System.out.println("testMethod");
    }

 }

当我从 Main 类开始运行我的项目时,应该首先使用@BeforeClass运行方法,进行测试,然后使用@AfterClass注释运行该方法

测试工作正常,但它会跳过setUp方法和tearDown方法。我尝试了@Before@BeforeClass注释。

我对套件结构感到困惑。任何帮助,将不胜感激。 谢谢

1 个答案:

答案 0 :(得分:1)

@Before@BeforeClass应该在Test课程中使用,而不是TestSuite。如果需要为多个Test类提供公共setUptearDown,那么将这两个方法放在一个超类中,并通过ATestBTest测试类扩展该超类。此外,只需使用@RunWith@SuiteClasses注释即可构建和运行套件,并且不需要CustomTestSuite类。

所以改变如下。

CustomTestSuite变为TestSuper

public class TestSuper {
    @BeforeClass
    public static void setUp() throws Exception {
        System.out.println("Before class test");
    }

    @After
    public void tearDown() throws Exception {
        System.out.println("After class test");
    }
}

现在ATest扩展了TestSuper

public class ATest extends TestSuper {
    @Test
    public void testMethod() {
        System.out.println("testMethod");
    }
}

同样BTest也应扩展TestSuper。 只需将@RunWith@SuiteClasses注释添加到Main类,如下所示,然后运行Main

@RunWith(Suite.class)
@SuiteClasses({ATest.class, BTest.class})
public class Main {

}

了解这些变化。