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:
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:
- http://selimober.com/blog/2014/01/24/separate-unit-and-integration-tests-using-gradle/
- https://blog.safaribooksonline.com/2013/08/22/gradle-test-organization/
But I haven't been able to figure out how to get this to work with Android Studio. Various combinations of
main
andmain.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.
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 inandroidTest
.
@sm4's answer works indeed for a Java module (with
apply plugin: 'java'
), but unfortunately not for Android application (apply plugin: 'com.android.application'
) nor Android library modules (apply plugin: com.android.library
).But I have found a workaround:
Create the folders for your integration tests:
Add the sourceSets for your new folders:
In a pure Java module the
java
folder would now turn green and theres
folder icon would change. In an Android application/library module it does not.Now create a product flavor identically named as the folder configured in the sourceSet, and it works!
And to put a cherry on top:
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
:IntelliJ idea picks up the folders under
src/integration
if they have the standard names (java, resources).