Задача 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 и заставить его делать свое дело. Есть ли способ сделать что-то подобное?

0 ответов

Другие вопросы по тегам