Java 如何在模块中执行所有junit5测试之前和之后编写一次代码?
我有一个多模块项目spring boot项目,其中每个模块生成一个jar。每个模块都有一个带有JUnit5测试的Java 如何在模块中执行所有junit5测试之前和之后编写一次代码?,java,junit5,Java,Junit5,我有一个多模块项目spring boot项目,其中每个模块生成一个jar。每个模块都有一个带有JUnit5测试的src/main/test。是否有一种方法可以在执行特定模块中的src/main/test中的所有测试之前和之后运行代码?例如,如果我有两个模块A和B,我想要 在执行模块A中的所有测试之前运行代码 运行代码所有测试模块A执行 在执行模块B中的所有测试之前运行代码 执行模块B中的所有测试后运行代码 您可以定义测试类中方法的顺序,但不能定义测试类的顺序 public class Modu
src/main/test
。是否有一种方法可以在执行特定模块中的src/main/test
中的所有测试之前和之后运行代码?例如,如果我有两个模块A和B,我想要
- 在执行模块A中的所有测试之前运行代码
- 运行代码所有测试模块A执行
- 在执行模块B中的所有测试之前运行代码
- 执行模块B中的所有测试后运行代码
public class ModuleBaseClass {
private static boolean started = false;
@BeforeAll
public static void beforeAllMethod() {
if (!started) {
System.out.println("@BeforeAll static method invoked once.");
started = true;
}
System.out.println("@BeforeAll static method invoked for every class.");
}
}
public class ModuleFeature1Class extends ModuleBaseClass {
@Test
public void testMethod() {
System.out.println("ModuleFeature1Class: in testMethod().");
}
}
public class ModuleFeature2Class extends ModuleBaseClass {
@Test
public void testMethod() {
System.out.println("ModuleFeature2Class: in testMethod().");
}
}
这个特性有一个开放的请求,但是还没有消息说JUnit是否会实现它:您可以使用继承和注释,还可以选择使用一个标志,对所有继承的测试类只执行一次
public class ModuleBaseClass {
private static boolean started = false;
@BeforeAll
public static void beforeAllMethod() {
if (!started) {
System.out.println("@BeforeAll static method invoked once.");
started = true;
}
System.out.println("@BeforeAll static method invoked for every class.");
}
}
public class ModuleFeature1Class extends ModuleBaseClass {
@Test
public void testMethod() {
System.out.println("ModuleFeature1Class: in testMethod().");
}
}
public class ModuleFeature2Class extends ModuleBaseClass {
@Test
public void testMethod() {
System.out.println("ModuleFeature2Class: in testMethod().");
}
}
这将打印:
@BeforeAll static method invoked once.
@BeforeAll static method invoked for every class.
ModuleFeature1Class: in testMethod().
@BeforeAll static method invoked for every class.
ModuleFeature2Class: in testMethod().
同样,您可以使用注释在测试后执行。如果所有测试都在一个类中,则@BeforeClass注释会执行此任务。我想错了吗?@sfarbac JUnit5将注释
@BeforeClass
重命名为@BeforeAll
我不是在谈论测试方法的顺序。我说的是在src/main/test运行中的所有测试之前,以及在所有测试都完成运行之后。例如,在一个模块中运行所有测试后关闭数据库。我建议查看junit jupiter listener@BeforeAll在类中的测试方法上的工作,它在包含测试方法的类集合中不起作用。