且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

从Android Studio中的单元测试分离集成测试

更新时间:2023-01-18 16:06:27

我已经做正是这种在摇篮分离的,但对于一个纯Java的项目,而不是Android系统。你是不是在指定源套,我认为这是问题的类路径。下面是相关的部分的的build.gradle

  sourceSets {
    整合{
        java的{
            compileClasspath + = main.output + test.output
            runtimeClasspath + = main.output + test.output
            SRCDIR文件('SRC /集成/ Java的)
        }
        资源{
            SRCDIR的src /集成/资源
        }
    }
}配置{
    integrationCompile.extendsFrom testCompile
    integrationRuntime.extendsFrom testRuntime
}任务integrationTest(组:核查,type:测试){
    testClassesDir = sourceSets.integration.output.classesDir
    CLASSPATH = sourceSets.integration.runtimeClasspath
}
integrationTest.dependsOn testClasses

IntelliJ IDEA的在的src /集成拿起文件夹,如果他们有标准名称(Java中,资源)。

I'm trying to separate out integration tests in Android Studio 0.9.

I have added the following to the build file:

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

task integrationTest(type: Test) {
    testClassesDir = sourceSets.integrationTest.output.classesDir
    classpath = sourceSets.integrationTest.runtimeClasspath
}

I've run into a couple of issues:

  1. The task will run but it doesn't have the rest of the project files available so I get errors about missing classes. There are some Java specific solutions I've found such as:

    But I haven't been able to figure out how to get this to work with Android Studio. Various combinations of main and main.output and playing around with dependencies don't seem to work, I get errors like:

    Error:(33, 0) Could not find property 'main' on SourceSet container..
    

    Which makes sense as the android plugin defines its own source sets, but these don't work either.

  2. The IDE doesn't recognise the directory as a test source directory. For testing purposes I changed the source set name to androidTest and it correctly gets the green folder icon and the tests are run along with the existing unit tests that are already defined in androidTest.

I've done exactly this kind of separation in Gradle, but for a pure Java project, not Android. You are not specifying the classpath in source sets, which I think is the issue. Here's the relevant part of the 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

IntelliJ idea picks up the folders under src/integration if they have the standard names (java, resources).