JUnit5 @MethodSources配置报错:参数化测试参数加载失败排查
JUnit 5.11 @MethodSources 配置错误排查
我在使用JUnit 5.11版本的@MethodSources注解编写参数化测试时遇到了问题。以下是我的测试代码:
class MapFieldsTest { static Stream<Arguments> testGetIntCommon() { return Stream.of( Arguments.of("a", 10), Arguments.of("b", 20) ); } static Stream<Arguments> testGetIntBroken() { return Stream.of( Arguments.of("c", null), Arguments.of("d", null) ); } @ParameterizedTest @MethodSources({ @MethodSource("testGetIntCommon"), @MethodSource("testGetIntBroken") }) void testGetInt(String givenKey, Integer expected) { // 此方法运行报错 } @ParameterizedTest @MethodSource("testGetIntCommon") void testGetIntCommon(String givenKey, Integer expected) { // 此方法正常运行 } @ParameterizedTest @MethodSource("testGetIntBroken") void testGetIntBroken(String givenKey, Integer expected) { // 此方法正常运行 } }
运行时出现如下错误:
MapFieldsTest.testGetInt(String, Integer) » PreconditionViolation Configuration error: You must configure at least one set of arguments for this @ParameterizedTest
问题原因
你对@MethodSources注解的用法理解有误。@MethodSources的参数是方法名称的字符串数组,而非嵌套的@MethodSource注解数组。
JUnit 5.11中,@MethodSources是@MethodSource的复数形式,专门用来一次性指定多个提供参数的静态方法,直接传入方法名的字符串即可,不需要给每个方法单独添加@MethodSource注解。
修正后的代码
将testGetInt方法上的注解修改为:
@ParameterizedTest @MethodSources({"testGetIntCommon", "testGetIntBroken"}) void testGetInt(String givenKey, Integer expected) { // 现在可以正常运行 }
这样就能合并两个方法提供的参数流,正常执行参数化测试了。
内容的提问来源于stack exchange,提问作者zolv
相关产品推荐
相关产品推荐

