我想在每个 Spring Boot JUnit 测试用例之前初始化状态,并带有TestExecutionListener
。此初始化需要在调用 JUnit@Rule
s 的相应回调之前运行。
我本来希望beforeTestMethod
是正确的,因为它的JavaDoc评论说
在执行底层测试框架的生命周期回调之前预处理测试
规则为测试提供"之前"回调,因此我本以为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
}
public class MyTestExecutionListener implements TestExecutionListener {
@Override
public void beforeTestMethod(TestContext testContext) {
// ...
}
}
@Component
public class AutoLogin extends ExternalResource {
@Override
protected void before() {
// ...
}
}
我希望方法按顺序执行
beforeTestMethod()
rule.before()
test1()
但实际顺序是
rule.before()
beforeTestMethod()
test1()
知道我做错了什么,或者我应该使用哪种其他TestExecutionListener
方法?
如果要在执行Rule
之前初始化每个测试的状态,则应使用TestExecutionListener
接口的prepareTestInstance
方法。
@Override
public void prepareTestInstance(TestContext testContext) {
System.out.println("inside prepareTestInstance");
}
这样,您将按以下顺序执行方法:
prepareTestInstance()
rule.before()
test1()
请注意,prepareTestInstance
将在每个测试方法之前执行