JUnit - 在@BeforeAll之前执行的方法和在@AfterAll之后执行的方法

时间:2017-12-11 04:55:19

标签: java junit

我有多个JUnit测试类可以在每个测试类中运行多个测试。我有一个基础测试类,它是所有测试类的父级。有没有办法在基础测试类中编写方法,在@BeforeAll之前和@AfterAll之后只对所有测试类执行一次?或者是否可以实现任何interface或可以扩展以解决此问题的任何类?

BaseJUnitTest.class

import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.platform.runner.JUnitPlatform;
import org.junit.runner.RunWith;

@RunWith(JUnitPlatform.class)
public class BaseJUnitTest {

    // method to execute before all JUnit test classes

    @BeforeAll
    public static void beforeAll() throws Exception {

    }

    @AfterAll
    public static void afterAll() throws Exception {

    }

    @BeforeEach
    public void beaforeEachTest() {

    }

    @AfterEach
    public void afterEachTest() {

    }

    // method to execute after all JUnit test classes
}

SampleTest.class

public class SampleTest extends BaseJUnitTest {

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

注意:我正在使用JUnit 5,尽管在这种情况下我希望JUnit 4或5无关紧要

2 个答案:

答案 0 :(得分:2)

我认为你需要一个"测试套件"而不是基础测试类。该套件将包含您的测试用例。在此测试套件类中,使用@Beforeclass和@Afterclass来包含需要在套件中存在的所有测试之前或之后完成的工作。

以下是详细解答Before and After Suite execution hook in jUnit 4.x

答案 1 :(得分:0)

Salim的第一个回答是要走的路。要在注释中回答您的其他查询,您需要使用@SuiteClasses注释注册属于您的诉讼的类。

修改

要反过来注册测试用例,Reflection是要走的路。您需要实现ClassFinder,TestCaseLoader和TestAll类。您可以为每个项目定义TestCaseLoader,而TestAll可以是ditributable jar的一部分。这里有一个详细的例子: https://www.javaworld.com/article/2076265/testing-debugging/junit-best-practices.html?page=2