gpt4 book ai didi

kotlin - 使用纯 Kotlin 函数作为 Junit5 方法源

转载 作者:行者123 更新时间:2023-12-02 12:35:47 25 4
gpt4 key购买 nike

我很好奇在 Kotlin 中,在 Junit5 的参数化测试中,我是否可以使用类外的方法作为 @MethodSource。

我知道在 Kotlin 中使用 @MethodSource 的 2 种方法 - 伴随对象和 @TestInstance(TestInstance.Lifecycle.PER_CLASS)。我想知道是否可以通过不同的方式来完成,例如通过在类之外声明一个方法并使用一些注释?我试图这样做,但它不起作用,我想知道是否可以做类似的事情。

class GenerationStatusTest {

@ParameterizedTest
@MethodSource("provideStatusesToTest")
internal fun shouldStatusesHaveExpectedAbilities(generationStatus: GenerationStatus, assertions:(GenerationStatus)->Unit) {
assertions(generationStatus)
}
}

fun provideStatusesToTest(): Stream<Arguments> {
return Stream.of(
Arguments.of(WAITING, canDoNothing),
Arguments.of(PROCESSING, canDoNothing)
)
}
org.junit.platform.commons.JUnitException: Could not find factory method [provideStatusesToTest] in class [com.test.enums.GenerationStatusTest]
at org.junit.jupiter.params.provider.MethodArgumentsProvider.lambda$getMethod$4(MethodArgumentsProvider.java:83)

最佳答案

最好的解决方案是添加 @JvmStatic提供者函数的注释。

class SumTest {

@ParameterizedTest(name = "{0} + {1} = {2}")
@MethodSource("sumProvider")
fun sum(a: Int, b: Int, expected: Int) {
Truth.assertThat((a + b)).isEqualTo(expected)
}

companion object {
@JvmStatic
fun sumProvider(): Stream<Arguments> {
return Stream.of(
Arguments.of(1, 2, 3),
Arguments.of(5, 10, 15)
)
}
}
}

关于kotlin - 使用纯 Kotlin 函数作为 Junit5 方法源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57054115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com