android - 如何使用 gradle 动态切换/更改 testInstrumentationRunner

标签 android gradle android-gradle-plugin android-testing

我的项目有 2 组不同的测试。一组仅使用默认的 AndroidJUnitRunner 运行,另一组必须使用自定义实现 TestRunner extends MonitoringInstrumentation 运行。

目前我每次需要运行另一组测试时通过编辑 build.gradle 来切换 testInstrumentationRunner:

android{
      defaultConfig {
          //testInstrumentationRunner "my.custom.TestRunner"
           testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
      }
}

我知道 flavor 可以有自己的 testInstrumentationRunner,但我当前的应用程序已经有 2 个 flavourDimensions。使用 flavor 实际上是为了拥有不同版本的应用程序。我需要 2 个版本的测试应用程序,都使用不同的 testInstrumentationRunner 测试同一个应用程序。

我尝试通过迭代所有测试变体来更改 testInstrumentationRunnertestInstrumentationRunner 属性其实有多个:

android.testVariants.all { TestVariant variant ->
    //readonly
    variant.variantData.variantConfiguration.instrumentationRunner

    variant.variantData.variantConfiguration.defaultConfig.testInstrumentationRunner

}

但只要调用 android.testVariants,构建就会被配置,并且所有更改都不会反射(reflect)在构建中。

如何动态更改 testInstrumentationRunner(来自 gradle 插件)?

我希望有 2 个不同的 gradle 任务,每个任务使用不同的 testInstrumentationRunner 但测试相同的变体。因为我打算创建一个 gradle 插件,所以解决方案也应该作为插件工作。

最佳答案

您是否考虑过使用控制台参数作为两种配置之间的切换?就这么简单:

android {
      defaultConfig {
           if (project.ext.has("customRunner")) {
               testInstrumentationRunner "my.custom.TestRunner"
           } else {
               testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
           }
      }
}

然后例如运行 gradlew aDeb -PcustomRunner 如果您想使用自定义运行器或 gradlew aDeb 进行测试以使用默认值。

我知道这不是火箭科学,但越简单越好,对吧?你也可以在你的插件中使用它,只需获取 Project 对象并做类似的事情。

关于android - 如何使用 gradle 动态切换/更改 testInstrumentationRunner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31543365/

相关文章:

java - 使用反射查找 JNI 中的 Java 类是否为 Final

android-studio - 如何解决: 'com.xxx.xxxx.MainActivity'不能少分配给 'android.app.Activity'

android - Gradle 找不到模块依赖的传递依赖

java - 在两台计算机上测试 Android 应用程序时结果截然不同

java - 如何解决spring-modules-validation.jar vlang.tld中遇到XMLStreamException Unexpected value 'body-content'

java - LocationListener、LocationRequest、LocationServices 在实现 Google Maps API 以在 Android Studio 中查找附近地点时导入无效

android - 在抽屉导航 Activity 中,我应该在菜单上使用 Activity 还是 fragment ?

Android AVD 模拟器在 Android Studio 中不工作

android - 我可以在基础类和 child 类注册 Otto 巴士吗?

android - 保持 Android Studio 的特定依赖项顺序