【发布时间】:2018-07-21 23:04:35
【问题描述】:
我正在尝试使用 Android Test Orchestrator 运行参数化测试。但由于某种原因,参数化测试不会开始。我可以在没有 Orchestrator 的情况下正确运行所有测试,但我需要它来清除测试之间的一些数据。
这是 Gradle 的输出。它可以看到所有 14 个测试,但只有 12 个被执行(缺少 2 个被参数化):
Starting 14 tests on Nexus_5X_API_27(AVD) - 8.1.0
Tests on Nexus_5X_API_27(AVD) - 8.1.0 failed: Test run failed to complete. Expected 14 tests, received 12
Test run failed to complete. Expected 14 tests, received 12
Gradle:
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
}
}
【问题讨论】:
-
您找到其他解决方案了吗?密封类无法扩展,尤其是动态生成的测试数据。
-
@TWiStErRob 因此,注释处理器可用于生成 ui 测试。但由于运行前需要额外的 kapt 步骤,它也不是完美的解决方案。
-
啊,好主意。随着增量 KAPT 的推出,它可能是一个可行的解决方案。虽然我更喜欢开箱即用的“刚刚工作”......即github.com/android/android-test/issues/215
标签: android junit kotlin android-espresso