testInstrumentationRunner

testInstrumentationRunner

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

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

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

我知道口味可以具有自己的testInstrumentationRunner,但是我当前的应用程序已经具有2 flavourDimensions。实际上,使用口味旨在具有不同版本的应用程序。我需要2个版本的测试应用程序,两个版本都使用不同的testInstrumentationRunner测试同一个应用程序。

我尝试通过遍历所有测试变体来更改testInstrumentationRunner。实际上有多个testInstrumentationRunner属性:
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 gradle插件1.3,可以创建单独的测试模块。这些测试模块中的每个模块都可以具有自己的testInstrumentationRunner。

有关详细示例,请参见github上的AndroidTestingBlueprint示例项目。

来自@ johan-stuyts的解决方案可以很好地工作(或者至少它与android gradle插件1.2兼容)。但是它使用私有(private)API,并且创建一个单独的模块更加容易,并且可以面向 future 。

10-07 23:40