我正试图在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
}
我遇到了几个问题:
任务将运行,但它没有其他项目文件可用,因此我收到有关缺少类的错误。我发现了一些Java特定的解决方案,例如:
但我无法弄清楚如何使用Android Studio。 main
和main.output
的各种组合以及依赖关系似乎不起作用,我得到的错误如下:
Error:(33, 0) Could not find property 'main' on SourceSet container..
这有意义,因为android插件定义了自己的源集,但这些也不起作用。
IDE无法将该目录识别为测试源目录。出于测试目的,我将源集名称更改为androidTest
并正确获取绿色文件夹图标,并且测试与已在androidTest
中定义的现有单元测试一起运行。
答案 0 :(得分:2)
@ sm4的答案适用于Java模块(apply plugin: 'java'
),但遗憾的是不适用于Android应用程序(apply plugin: 'com.android.application'
)和Android库模块(apply plugin: com.android.library
)。
但我找到了解决方法:
为集成测试创建文件夹:
src/integrationTest/java
src/integrationTest/res
为新文件夹添加sourceSet:
sourceSets {
integrationTest {
java {
srcDir file('src/integrationTest/java')
}
res {
srcDir file('src/integrationTest/res')
}
}
}
在纯Java模块中,java
文件夹现在变为绿色,res
文件夹图标将更改。在Android应用程序/库模块中,它没有。
现在创建一个名为sourceSet中配置的文件夹的产品风格,它可以工作!
productFlavors {
integrationTest {
}
}
并将樱桃放在上面:
configurations {
integrationTestCompile.extendsFrom testCompile
}
答案 1 :(得分: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
如果IntelliJ构思具有标准名称(java,资源),则会在src/integration
下选择文件夹。