IntelliJ运行集成测试调用AfterAllCallback与failsafe表现不一致咨询
问题1:该现象的成因
该现象既不是IntelliJ运行逻辑异常,也不是failsafe参数配置错误,本质是两者默认的JUnit 5测试容器管理策略不同:
- maven-failsafe-plugin
3.0.0-M5默认会将当前模块所有符合规则的集成测试归到单个根测试容器下管理,AfterAllCallback扩展绑定在根容器生命周期上,因此只会在全部测试执行完成后触发一次 - IntelliJ IDEA
2021.2.3默认的JUnit 5运行逻辑,会将每个测试类作为独立的子测试容器分别管理,每个测试类对应的容器生命周期结束时都会触发一次绑定的AfterAllCallback,因此会出现每跑完一个测试类就调用一次扩展的表现
问题2:IntelliJ对齐failsafe逻辑的配置方法
可以通过修改IntelliJ测试运行配置实现逻辑对齐,操作步骤如下:
- 打开你当前用于运行所有集成测试的JUnit运行配置编辑页
- 点击「修改选项(Modify options)」按钮,在下拉菜单的「测试(Tests)」分类下,勾选「将测试类合并为单个套件(Combine test classes into a single suite)」
- 保存配置后重新运行测试即可。修改后IDEA会把所有选中的测试类归入同一个测试容器执行,
AfterAllCallback只会在全部测试结束后触发一次,和failsafe的运行表现完全一致。
如果你的IDEA版本找不到上述选项,也可以通过添加JVM启动参数实现:在运行配置的「VM options」栏加入-Djunit.platform.suite.defaultDetectionEnabled=true,效果和上面的配置一致。
内容的提问来源于stack exchange,提问作者JKomoroski
相关产品推荐
相关产品推荐

