将集成测试与Android Studio中的单元测试分开

Phi*_*lio 11 android integration-testing unit-testing gradle android-studio

我正试图在Android Studio 0.9中分离出集成测试.

我已将以下内容添加到构建文件中:

sourceSets {
    integrationTest {
        java.srcDir file('src/integrationTest/java')
    }
}

task integrationTest(type: Test) {
    testClassesDir = sourceSets.integrationTest.output.classesDir
    classpath = sourceSets.integrationTest.runtimeClasspath
}
Run Code Online (Sandbox Code Playgroud)

我遇到了几个问题:

  1. 该任务将运行,但它没有其他项目文件可用,所以我得到有关缺少类的错误.我发现了一些Java特定的解决方案,例如:

    但我还没弄清楚如何使用Android Studio.各种各样的mainmain.output依赖的组合似乎不起作用,我得到的错误如下:

    Error:(33, 0) Could not find property 'main' on SourceSet container..
    
    Run Code Online (Sandbox Code Playgroud)

    这有意义,因为android插件定义了自己的源集,但这些也不起作用.

  2. IDE无法将该目录识别为测试源目录.出于测试目的,我将源集名称更改为androidTest并正确获取绿色文件夹图标,并且测试与已定义的现有单元测试一起运行androidTest.

Rul*_*ule 5

@sm4 的答案确实适用于 Java 模块(带有apply plugin: 'java'),但不幸的是不适用于 Android 应用程序(apply plugin: 'com.android.application')或 Android 库模块(apply plugin: com.android.library)。

但我找到了一个解决方法:
为集成测试创建文件夹:

src/integrationTest/java
src/integrationTest/res
Run Code Online (Sandbox Code Playgroud)

为新文件夹添加源集:

sourceSets {
    integrationTest {
        java {
            srcDir file('src/integrationTest/java')
        }
        res {
            srcDir file('src/integrationTest/res')
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在纯 Java 模块中,java文件夹现在将变为绿色,并且res文件夹图标将发生变化。在 Android 应用程序/库模块中则不然。

现在创建一个与源集中配置的文件夹同名的产品风味,并且它可以工作!

productFlavors {
    integrationTest {
    }
}
Run Code Online (Sandbox Code Playgroud)

并在上面放一颗樱桃:

configurations {
    integrationTestCompile.extendsFrom testCompile
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*rga 1

我已经在 Gradle 中完成了这种分离,但针对的是纯 Java 项目,而不是 Android。您没有在源集中指定类路径,我认为这是问题所在。这是相关部分build.gradle

sourceSets {
    integration {
        java {
            compileClasspath += main.output + test.output
            runtimeClasspath += main.output + test.output
            srcDir file('src/integration/java')
        }
        resources {
            srcDir 'src/integration/resources'
        }
    }
}

configurations {
    integrationCompile.extendsFrom testCompile
    integrationRuntime.extendsFrom testRuntime
}

task integrationTest(group: "verification", type: Test) {
    testClassesDir = sourceSets.integration.output.classesDir
    classpath = sourceSets.integration.runtimeClasspath
}
integrationTest.dependsOn testClasses
Run Code Online (Sandbox Code Playgroud)

src/integration如果文件夹具有标准名称(java、资源),IntelliJ idea 会选取下面的文件夹。