3

我有一些不同的测试套件,我想从不同的 Gradle 任务中运行它们。每个都可能有不同的集合或依赖关系,并且不同testInstrumentationRunner. 例如,我想要以下命令行功能:

gradle connectedAndroidTest unitTest

  • androidTestCompile使用来自和的依赖项unitTestCompile
  • /src/androidTest在和中运行测试/src/unitTest目录中运行测试
  • 使用标准testInstrumentationRunner

gradle connectedAndroidTest uiTest

  • androidTestCompile使用来自和的依赖项uiTestCompile
  • /src/androidTest在和中运行测试/src/uiTest目录中运行测试
  • 使用“com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner”作为其testInstrumentationRunner

这可能吗——也许有变种或口味?

4

1 回答 1

2

我知道有几种方法可以做到这一点,但这是最直接的。我最近通过使用 Google 提供的小型、中型和大型注释来实现这一点。单元测试通常是小型和中型测试,而 Espresso 测试将是大型测试(谷歌解释了这背后的逻辑)。

从这里,您创建一个自定义构建配置字段并将其设置在您的 build.gradle 文件中,如下所示:

defaultConfig {
   ....
   buildConfigField "String", "TEST_SIZE", project.hasProperty('testSize') ? "\"${testSize}\"" : "null"
}

在您的自定义测试运行程序中,您可以在运行测试之前处理任何最后一秒的调整。如果您从构建配置中获取测试值并在发送之前将其设置为参数,那么只有带有该注释的测试才会运行。

    String sizeValue = BuildConfig.TEST_SIZE;
    if(!TextUtils.isEmpty(sizeValue)){
        arguments.putString("size", sizeValue);
    }

从命令行,只需运行:

./gradlew connectedAndroidTest -PtestSize=small

此外,为了稍微简化您的结构,您可以将所有测试放在 androidTest 目录中。此外,如果您想获取特定文件夹的特定信息,您可以使用上述相同的逻辑并使用不同的参数来执行此操作。您只需要知道需要将其设置为哪个参数。不要担心你没有通过 shell 运行测试;论据是相同的。

于 2014-06-05T22:46:06.143 回答