在我的项目中,我有验收测试,除了AndroidJUnitRunner和Espresso测试(仅与AndroidJUnitRunner一起运行)之外,还需要自定义的测试测试运行程序。我通过动态设置正确的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
}
然后,即使我没有使用gradle任务来运行
CucumberTestRunner (而不是AndroidJUnitRunner),也将 CucumberTestRunner 用于所有的仪器测试。
我也尝试了类似的方法
task runAcceptanceTests(type: Exec) {
...
commandLine 'connectedCheck', '-Pcucumber'
}
但这似乎不可能。后来我发现,不建议从其他任务运行任务。
我想,我遇到的困难是,我不想在运行gradle任务(例如 gradle runAcceptanceTests -Pcucumber )时添加任何标志。我基本上希望能够运行 gradle runAcceptanceTests 并使其发挥作用。有办法做这样的事吗?