JUnit @RunWith(Parameterized.class)参数null及构造器参数解析异常问题
问题根因
核心是JUnit4和JUnit5(Jupiter)的测试注解、运行逻辑混用,导致你定义的参数化规则完全没有被执行,对应两个现象的具体原因:
- 你在
BaseTest里写的@RunWith(Parameterized.class)、@Parameterized.Parameter、@Parameterized.Parameters全是JUnit4专属的参数化组件,只有测试用JUnit4引擎启动时才会生效。 - 构造器注入场景抛出的异常类路径为
org.junit.jupiter.api.extension.ParameterResolutionException,属于JUnit5的标准异常,说明当前测试实际是被JUnit5引擎执行的:- 字段注入时拿到null:JUnit5不识别JUnit4的参数化运行器配置,不会给
fSomething字段赋值,Boolean作为引用类型默认值就是null,所以打印结果为null - 构造器注入抛出参数解析异常:JUnit5默认没有注册对应参数解析器来匹配构造器里的boolean入参,找不到参数来源就直接抛错
- 字段注入时拿到null:JUnit5不识别JUnit4的参数化运行器配置,不会给
- 就算你引入了JUnit Vintage兼容引擎(用来在JUnit5平台跑JUnit4用例),如果子类
ATest没有显式声明使用JUnit4参数化运行器、或者类路径下同时存在JUnit4和JUnit5的@Test注解,执行引擎也会优先走JUnit5链路,跳过父类定义的JUnit4参数化逻辑。
内容的提问来源于stack exchange,提问作者FlowStack
相关产品推荐
相关产品推荐

