Kotlin JUnit5中将Map键数组传入@ValueSource参数化测试报错如何解决?
问题根因
@ValueSource 是JUnit框架提供的注解,其入参要求为编译期可确定的常量。你代码中用到的 ids 是运行时从Map实例的键动态生成的变量,不符合注解入参的约束,因此会触发报错。
解决方案
如果需要使用动态生成的参数实现参数化测试,改用 @MethodSource 作为参数源即可,修改后的代码示例如下:
private val id = mapOf("abc" to 10001,"def" to 955,"ghi" to 804,"jkl" to 805) // 参数提供方法,返回测试需要的参数流 fun idProvider(): Stream<String> = id.keys.stream() @ParameterizedTest @MethodSource("idProvider") // 关联对应的参数提供方法 fun idConverterImpl(memberId: String) { // 测试逻辑 }
补充说明
- 若你仍想使用
@ValueSource,只能手动将所有键硬编码到注解中,示例:@ValueSource(strings = ["abc", "def", "ghi", "jkl"]),该方式无法复用Map中定义的键 - 使用
@MethodSource时,指定的方法名需要和参数提供方法名完全匹配,且该方法不能用private修饰 - 运行前确保已引入JUnit5的
junit-jupiter-params依赖,支持参数化测试相关功能
内容的提问来源于stack exchange,提问作者24t7it3
相关产品推荐
相关产品推荐

