Gradle任务以使用自定义运行器运行验收测试

时间:2018-12-11 07:32:38

标签: android cucumber task cradle

在我的项目中,我有验收测试,除了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 。但是,我不想有每次我要运行这些测试时都手动键入的内容,而是希望有一个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
}

然后,即使我没有使用gradle任务来运行

CucumberTestRunner (而不是AndroidJUnitRunner),也将 CucumberTestRunner 用于所有的仪器测试。

我也尝试了类似的方法

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

但这似乎不可能。后来我发现,不建议从其他任务运行任务。

我想,我遇到的困难是,我不想在运行gradle任务(例如 gradle runAcceptanceTests -Pcucumber )时添加任何标志。我基本上希望能够运行 gradle runAcceptanceTests 并使其发挥作用。有办法做这样的事吗?

0 个答案:

没有答案