Java 在JUnit规则运行之前,使用Spring TestExecutionListener初始化状态
我想在每个Spring引导JUnit测试用例之前使用Java 在JUnit规则运行之前,使用Spring TestExecutionListener初始化状态,java,spring,spring-test,Java,Spring,Spring Test,我想在每个Spring引导JUnit测试用例之前使用TestExecutionListener初始化状态。在调用JUnit@Rules的相应回调之前,需要运行此初始化 我本以为beforeTestMethod会适合这种情况,因为它的JavaDoc注释说 在执行底层测试框架的生命周期回调之前预处理测试 规则将“before”回调用于测试,因此我希望beforeTestMethod在规则之前执行。但是,调试器显示情况并非如此 这是我的代码结构: @RunWith(SpringRunner.clas
TestExecutionListener
初始化状态。在调用JUnit@Rule
s的相应回调之前,需要运行此初始化
我本以为beforeTestMethod
会适合这种情况,因为它的JavaDoc注释说
在执行底层测试框架的生命周期回调之前预处理测试
规则将“before”回调用于测试,因此我希望beforeTestMethod
在规则之前执行。但是,调试器显示情况并非如此
这是我的代码结构:
@RunWith(SpringRunner.class)
@SpringBootTest
@TestExecutionListeners(listeners = MyTestExecutionListener.class, mergeMode = MergeMode.MERGE_WITH_DEFAULTS)
public class MyTest {
@Autowired
@Rule
public MyRule rule;
@Test
public void test1() {
// ...
}
// ... more tests
}
我希望这些方法按顺序执行
beforeTestMethod()
rule.before()
test1()
rule.before()
beforeTestMethod()
test1()
你知道我做错了什么,或者我应该使用哪个
TestExecutionListener
方法吗?如果你想在执行规则之前初始化每个测试的状态,你应该使用TestExecutionListener
接口的prepareTestInstance
方法
@Override
public void prepareTestInstance(TestContext testContext) {
System.out.println("inside prepareTestInstance");
}
这样,您将按以下顺序执行这些方法:
prepareTestInstance()
rule.before()
test1()
请注意,preparetestistance
将在每个测试方法之前执行
@Component
public class AutoLogin extends ExternalResource {
@Override
protected void before() {
// ...
}
}
@Override
public void prepareTestInstance(TestContext testContext) {
System.out.println("inside prepareTestInstance");
}