TestExecutionListener 根本不在侦听



我有自定义的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
}
}

相关内容

  • 没有找到相关文章

最新更新