Задача Gradle для запуска приемочных испытаний с пользовательским бегуном - PullRequest
0 голосов
/ 11 декабря 2018

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

...