Задача Gradle для запуска приемочных испытаний с пользовательским бегуном
В моем проекте у меня есть приемочные тесты, которым нужен пользовательский инструментальный тестовый прогон, отличный от тестов 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 и заставить его делать свое дело. Есть ли способ сделать что-то подобное?