3

在我的项目中,我有验收测试需要自定义仪器测试运行器,而不是 AndroidJUnitRunner 和仅与 AndroidJUnitRunner 一起运行的 Espresso 测试。我通过动态设置正确的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
}

然后,Android 使用CucumberTestRunner进行所有仪器测试(如 Espresso)而不是 AndroidJUnitRunner,即使我没有使用我的 gradle 任务运行它们。

我也尝试了一些类似的东西

task runAcceptanceTests(type: Exec) {
  ...
  commandLine 'connectedCheck', '-Pcucumber'
}

但这似乎是不可能的。后来我发现不建议从另一个任务运行任务。

我想,就我而言,困难在于我不想在运行gradle runAcceptanceTests -Pcucumber 之类的 gradle 任务时添加任何标志。我基本上希望能够运行gradle runAcceptanceTests并让它做它的事情。有没有办法做这样的事情?

4

0 回答 0