Spring Contract测试无法调用基类标注@Before注解的方法
问题根本原因
这是JUnit版本注解不兼容导致的,两个大版本的JUnit注解互不识别:
@Before属于JUnit4提供的测试生命周期注解,对应的运行器体系是@RunWith@BeforeEach、@BeforeAll属于JUnit5(JUnit Jupiter)提供的测试生命周期注解,对应的扩展体系是@ExtendWith
触发场景
你当前项目的测试运行环境使用的是JUnit5平台:
- Spring Contract 3.x及以上版本默认自动生成的测试用例是基于JUnit5规范的
- JUnit5平台默认只会识别JUnit5的生命周期注解,不会处理JUnit4的
@Before注解,除非引入了兼容依赖。
解决方案
有两种可选择的方案:
方案1:统一使用JUnit5注解(推荐)
直接将基类的JUnit4注解全部替换为JUnit5对应注解即可,适配当前默认运行环境:
- 把
@Before替换为@BeforeEach @RunWith(SpringRunner.class)可以直接删除,Spring Boot 2.2及以上版本的@SpringBootTest已经默认集成了Spring扩展支持,无需额外配置。
方案2:保留JUnit4注解,添加兼容依赖
如果要继续沿用JUnit4的注解体系,需要在项目构建配置中引入JUnit Vintage引擎依赖,让JUnit5平台支持识别JUnit4的注解:
Maven配置示例:
<dependency> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> <scope>test</scope> </dependency>
内容的提问来源于stack exchange,提问作者Eduardo
相关产品推荐
相关产品推荐

