我有自定义的TestExecutionListener:
public class CustomExecutionListener extends AbstractTestExecutionListener {
@Override
public void beforeTestMethod(TestContext testContext) throws Exception {
// some code ...
}
@Override
public void afterTestMethod(TestContext testContext) throws Exception {
// some code ...
}
}
在我的测试类中,我按如下方式配置它:
@TestExecutionListeners({
DirtiesContextTestExecutionListener.class,
DependencyInjectionTestExecutionListener.class,
CustomExecutionListener.class
})
class MyTestClass {
private static ApplicationContext appContext;
@BeforeAll
static void init() {
appContext = new AnnotationConfigWebApplicationContext();
// register some configs for context here
}
@Test
void test() {
}
}
而且CustomExecutionListener
不起作用 - 在调试器中我什至不去那里。我想这可能是我创建ApplicationContext
的方式有问题:可能是TestContext
封装不是我的appContext
?(我不太了解TestContext
是如何创作的。也许有人可以解释一下?但即便如此,它至少应该去莱斯特纳的beforeTestMethod
?要不?
第二个问题:如果它真的封装的不是我appContext
我该如何解决这个问题? 即将我的appContext
设置为testContext.getApplicationContext()
?我需要能够像testContext.getApplicationContext().getBean(...)
一样从我的appContext
中提取豆子。
对于初学者来说,只有当你使用Spring TestContext Framework(TCF(时,才支持TestExecutionListener
。
由于您使用的是 JUnit Jupiter(又名 JUnit 5(,因此您需要用@ExtendWith(SpringExtension.class)
或@SpringJUnitConfig
或@SpringJUnitWebConfig
来注释您的测试类。
此外,不应以编程方式创建ApplicationContext
。相反,您可以让 TCF 为您执行此操作 - 例如,通过声明性地指定通过@ContextConfiguration
、@SpringJUnitConfig
或@SpringJUnitWebConfig
使用哪些配置类。
一般来说,我建议您阅读 Spring 参考手册的测试章节,如果这还不够有用,您当然可以在线找到"使用 Spring 进行集成测试"的教程。
问候
Sam(Spring TestContext Framework的作者(
您是否尝试过@Before
哪些不是必需的静态方法?
private static ApplicationContext appContext;
@Before
public void init() {
if(appContext == null) {
appContext = new AnnotationConfigWebApplicationContext();
// register some configs for context here
}
}