在我的项目中,我有验收测试需要自定义仪器测试运行器,而不是 AndroidJUnitRunner 和仅与 AndroidJUnitRunner 一起运行的 Espresso 测试。我通过动态设置正确的testInstrumentationRunner解决了这个问题:
android {
...
defaultConfig {
...
testInstrumentationRunner: getInstrumentation()
}
}
def getInstrumentation() {
project.hasProperty('cucumber') ?
'com.example.test.CucumberTestRunner' :
'android.support.test.runner.AndroidJUnitRunner'
}
要运行验收测试,我需要从命令行运行./gradlew connectedCheck -Pcucumber。但不是每次我想运行这些测试时手动输入这个,我想要一个 gradle 任务来为我完成这项工作。这个想法是在任务中定义属性,以便在配置阶段设置它,然后执行 connectedCheck。
task runAcceptanceTests() {
description = 'Run acceptance tests'
group = 'acceptanceTests'
project.ext {
cucumber = 'cucumber'
}
dependsOn connectedCheck
}
但是,甚至在任务中设置属性之前调用getInstrumentation() 。像这样手动设置 testInstrumentationRunner 也不起作用:
android {
...
defaultConfig {
...
testInstrumentationRunner: 'android.support.test.runner.AndroidJUnitRunner'
}
}
task runAcceptanceTests() {
description = 'Run acceptance tests'
group = 'acceptanceTests'
project.android.defaultConfig.testInstrumentationRunner = 'com.example.test.CucumberTestRunner'
dependsOn connectedCheck
}
然后,Android 使用CucumberTestRunner进行所有仪器测试(如 Espresso)而不是 AndroidJUnitRunner,即使我没有使用我的 gradle 任务运行它们。
我也尝试了一些类似的东西
task runAcceptanceTests(type: Exec) {
...
commandLine 'connectedCheck', '-Pcucumber'
}
但这似乎是不可能的。后来我发现不建议从另一个任务运行任务。
我想,就我而言,困难在于我不想在运行gradle runAcceptanceTests -Pcucumber 之类的 gradle 任务时添加任何标志。我基本上希望能够运行gradle runAcceptanceTests并让它做它的事情。有没有办法做这样的事情?