我有多个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无关紧要
答案 0 :(得分:2)
我认为你需要一个"测试套件"而不是基础测试类。该套件将包含您的测试用例。在此测试套件类中,使用@Beforeclass和@Afterclass来包含需要在套件中存在的所有测试之前或之后完成的工作。
答案 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