我的项目有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 。