В моем проекте есть приемочные тесты, для которых требуется пользовательский инструментальный тестовый прогон, отличный от тестов 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 из командной строки.Но вместо того, чтобы вводить это вручную каждый раз, когда я хочу запустить эти тесты, я хотел бы иметь задачу, которая выполняет эту работу за меня.Идея заключалась в том, чтобы определить свойство в задаче, чтобы оно было установлено на этапе настройки, а затем выполнить 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, например gradle runAcceptanceTests -Pcucumber .Я в основном хочу иметь возможность запустить gradle runAcceptanceTests и заставить его делать свое дело.Есть ли способ сделать что-то подобное?