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

时间:2018-02-11 19:02:58

标签: android junit 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"
}

测试

@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
    }

}

修改

可以使用变通密封类:

@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
    }

}

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

该问题已在 1.3.0-beta02 库的 androidx.test:runner 版本中修复。请参阅 AndroidX Test 1.3.0 Beta02 发行说明,其中明确指出此问题已修复。