使用Robolectric进行参数化测试-如何分别设置参数以进行测试?

时间:2018-11-28 16:39:25

标签: android unit-testing robolectric

我想使用ParameterizedRobolectricTestRunner在一个已经存在的测试类中创建一个新的参数化测试。

我仅使用@ParameterizedRobolectricTestRunner.Parameters找到示例和文档,并使用提供的参数进行了一次测试。像这样:

@RunWith(ParameterizedRobolectricTestRunner::class)
class TestClass(private val type: String, private val value: Int) {

    @Test
    fun `single test example`() {
        assertEquals(type, parser.getTypeByValye(value))
    }

    companion object {
        @JvmStatic
        @ParameterizedRobolectricTestRunner.Parameters(name = "{0}")
        fun params() = listOf(
                arrayOf("TIPO 1", 1),
                arrayOf("TIPO 2", 2),
                arrayOf("TIPO 4", 3)
        )
    }
}

但是我想在同一个文件中使用不同的参数创建许多测试,就像我通常对JUnitParamsRunner@Parameters所做的那样。像这样:

@RunWith(JUnitParamsRunner::class)
class TestClass {

    @Test
    @Parameters(method = "params1")
    fun `test example 1`(booleanParam: Boolean, enumParam: EnumParam) {
        givenBooleanParam(booleanParam)

        tested.doSomething()

        verify(anotherClass).doAnotherThing(enumParam, emptyMap())
    }

    @Test
    @Parameters(method = "params2")
    fun `test example 2`(enumParam: EnumParam, booleanParam: Boolean, stringParam: String) {
        givenString(stringParam)

        tested.doSomethingElse(booleanParam)

        verify(anotherClass).doAnotherThing(enumParam, emptyMap())
    }

    @Suppress("unused")
    private fun params1() =
            arrayOf(
                    arrayOf(true, EnumType1),
                    arrayOf(false, EnumType2)
            )

    @Suppress("unused")
    private fun params2() =
            arrayOf(
                    arrayOf(EnumType1, true, TRACK_ENUM_1),
                    arrayOf(EnumType2, false, TRACK_ENUM_2)
            )
}

是否可以通过@Parameters这样使用ParameterizedRobolectricTestRunner之类的东西?

0 个答案:

没有答案