Kotlin Junit5 ValueSource 作为数组变量
Kotlin Junit5 ValueSource as an array variable
我有一个键和值的映射,我想将键作为数组添加到 ValueSource,但是我有 error.Where 我错了吗?
这是我的代码
private val id = mapOf("abc" to 10001,"def" to 955,"ghi" to 804,"jkl" to 805)
private val ids:Array<String> = id.keys.toTypedArray()
@ParameterizedTest
@ValueSource(strings = ids)
fun idConverterImpl(memberId: String) {
}
你的键映射和获取没问题,你可能有其他问题我猜是private
你的测试无法获取数据
注释的参数必须是编译时常量。 ids
不是编译时间常量。它是 id.keys.toTypedArray()
的值,必须在运行时计算。
您可以像这样内联编写它:
@ParameterizedTest
@ValueSource(strings = ["abc", "def", "ghi", "jkl"])
fun idConverterImpl(memberId: String) { ... }
如果您不想在多个地方复制地图的键,您可以改用 MethodSource
。这允许您通过提供一个将生成参数的方法,将非编译时常量作为您测试的参数。
您需要将地图和值设为静态:
companion object {
@JvmStatic
private val id = mapOf("abc" to 100016040, "def" to 955803, "ghi" to 955804, "jkl" to 955805)
@JvmStatic
private val ids by lazy { id.keys }
}
通过在 ids
上使用 属性 委托,我让 Kotlin 生成了一个 getIds
方法,然后我可以使用 MethodSource
:
@ParameterizedTest
@MethodSource("getIds")
fun idConverterImpl(memberId: String) { ... }
我有一个键和值的映射,我想将键作为数组添加到 ValueSource,但是我有 error.Where 我错了吗?
这是我的代码
private val id = mapOf("abc" to 10001,"def" to 955,"ghi" to 804,"jkl" to 805)
private val ids:Array<String> = id.keys.toTypedArray()
@ParameterizedTest
@ValueSource(strings = ids)
fun idConverterImpl(memberId: String) {
}
你的键映射和获取没问题,你可能有其他问题我猜是private
你的测试无法获取数据
注释的参数必须是编译时常量。 ids
不是编译时间常量。它是 id.keys.toTypedArray()
的值,必须在运行时计算。
您可以像这样内联编写它:
@ParameterizedTest
@ValueSource(strings = ["abc", "def", "ghi", "jkl"])
fun idConverterImpl(memberId: String) { ... }
如果您不想在多个地方复制地图的键,您可以改用 MethodSource
。这允许您通过提供一个将生成参数的方法,将非编译时常量作为您测试的参数。
您需要将地图和值设为静态:
companion object {
@JvmStatic
private val id = mapOf("abc" to 100016040, "def" to 955803, "ghi" to 955804, "jkl" to 955805)
@JvmStatic
private val ids by lazy { id.keys }
}
通过在 ids
上使用 属性 委托,我让 Kotlin 生成了一个 getIds
方法,然后我可以使用 MethodSource
:
@ParameterizedTest
@MethodSource("getIds")
fun idConverterImpl(memberId: String) { ... }