无法使用Android Test Orchestrator运行参数化测试

Ale*_*rek 10 junit android kotlin android-espresso

我正在尝试使用Android Test Orchestrator运行参数化测试.但由于某些原因,参数化测试无法启动.我可以在没有Orchestrator的情况下正确运行所有测试但我需要它来清除测试之间的一些数据.

这是Gradle的输出.它可以看到所有14个测试,但只执行了12个(缺少2个参数化):

在Nexus_5X_API_27(AVD) - 8.1.0上开始14次测试

对Nexus_5X_API_27(AVD) - 8.1.0的测试失败:测试运行未能完成.预计14次测试,收到12次

测试运行未能完成.预计14次测试,收到12次

摇篮:

android {

    defaultConfig {       
        testInstrumentationRunner "foo.bar.CustomRunner"
    }

    testOptions {
        unitTests.returnDefaultValues = true
        execution 'ANDROID_TEST_ORCHESTRATOR'
    }
}

dependencies {  
    androidTestImplementation "com.android.support.test:runner:$runnerVersion"   
    androidTestUtil "com.android.support.test:orchestrator:$runnerVersion"
}
Run Code Online (Sandbox Code Playgroud)

测试:

@LargeTest
@RunWith(Parameterized::class)
class ParamTest(val param1: String, val param2: String) {

    companion object {
        @JvmStatic
        @Parameterized.Parameters
        fun data(): Collection<Array<Any>> {
            return listOf(
                    arrayOf("param1", "param2"),
                    arrayOf("param21", "param22")
            )
        }
    }

    @Test
    fun shouldDoSthWithParams() {
       //some test
    }

}
Run Code Online (Sandbox Code Playgroud)

编辑:

作为解决方法,可以使用密封类:

@LargeTest
@RunWith(AndroidJUnit4::class)
class ParamTest1 : ParamTest("param1", "param2")

@LargeTest
@RunWith(AndroidJUnit4::class)
class ParamTest2 : ParamTest("param21", "param22")

sealed class ParamTest(val param1: String, val param2: String) {

    @Test
    fun shouldDoSthWithParams() {
       //some test
    }

}
Run Code Online (Sandbox Code Playgroud)