如何结合JUnit4 @RunWith(Parameterized.class)和JUnit5 @ParameterizedTest

时间:2019-02-20 23:58:28

标签: kotlin junit4 junit5

我正在尝试将JUnit4中的参数化运行器的概念与JUnit5参数化测试结合起来。本质上,我想在同一组数据上测试两个单独的功能。

我知道我可以将函数作为另一个参数添加到参数化测试本身中,但是我正在尝试使更改或添加新函数更容易进行测试。

我能否利用嵌套的测试类来实现这一目标?我不确定最好的解决方法。

@RunWith(Parameterized::class)
class RomanNumeralTest(val func: (Int) -> String) {

    @ParameterizedTest(name = "{index} - Expect [{0}] should return [{1}]")
    @MethodSource("testData")
    fun `Test roman numeral from integer values`(num: Int, expected: String) =
            assertEquals(expected, func(num))

    companion object {

        @JvmStatic
        @Parameterized.Parameters
        fun data(): Collection<Array<(Int) -> String>> {
            return listOf(
                    arrayOf({num -> roman(num)}),
                    arrayOf({num -> num.toRomanNumeral()})
            )
        }

        @JvmStatic
        private fun testData() = sequenceOf(
                arrayOf(1, "I"),
                arrayOf(2, "II"),
                arrayOf(3, "III"),
                arrayOf(4, "IV"),
                arrayOf(5, "V")
        ).asStream()
    }
}

1 个答案:

答案 0 :(得分:0)

  

我尝试了相同的方法,但最终得出的结论是:您不能

您无法通过JUnit 5随附的注释来使用JUnit 4 Parameterized测试运行程序。

您需要转移到JUnit 5以使用最新功能,例如TestFactoryhere中描述的参数化测试的所有强大注释