Adding an additional test suite to Gradle
Solution 1
the "integration" sourceSet has not configured its compile and runtime classpath. That's why it can't find the classes from your main sourceset. you can configure the compile and runtime classpath in the following way:
sourceSets {
integTest {
java.srcDir file('src/integration-test/java')
resources.srcDir file('src/integration-test/resources')
compileClasspath = sourceSets.main.output + configurations.integTest
runtimeClasspath = output + compileClasspath
}
}
Solution 2
In most cases you want to use the same dependencies as your unit tests as well as some new ones. This will add the dependencies of your unit tests on top of the existing ones for integration tests (if any).
sourceSets {
integrationTest {
compileClasspath += sourceSets.test.compileClasspath
runtimeClasspath += sourceSets.test.runtimeClasspath
}
}
Comments
-
Mike Rylander about 2 years
I am attempting to add Gradle (1.4) to an existing project that has multiple test suites. The standard unit test located in
src/test/java
ran successfully, but I am having trouble setting up a task to run the JUnit test located insrc/integration-test/java
.When I run
gradle intTest
I get severalcannot find symbol
errors for classes insrc/main
. This leads me to believe that the dependencies are not set up correctly. How do I setupintTest
so that it will run my JUnit integration tests?build.gradle
apply plugin: 'java' sourceCompatibility = JavaVersion.VERSION_1_6 sourceSets { integration { java { srcDir 'src/integration-test/java' } resources { srcDir 'src/integration-test/resources' } } } dependencies { compile(group: 'org.springframework', name: 'spring', version: '3.0.7') testCompile(group: 'junit', name: 'junit', version: '4.+') testCompile(group: 'org.hamcrest', name: 'hamcrest-all', version: '1.+') testCompile(group: 'org.mockito', name: 'mockito-all', version: '1.+') testCompile(group: 'org.springframework', name: 'spring-test', version: '3.0.7.RELEASE') integrationCompile(group: 'junit', name: 'junit', version: '4.+') integrationCompile(group: 'org.hamcrest', name: 'hamcrest-all', version: '1.+') integrationCompile(group: 'org.mockito', name: 'mockito-all', version: '1.+') integrationCompile(group: 'org.springframework', name: 'spring-test', version: '3.0.7.RELEASE') } task intTest(type: Test) { testClassesDir = sourceSets.integration.output.classesDir classpath += sourceSets.integration.runtimeClasspath }
Details: Gradle 1.4
Solution: I had not set the compile classpath for the integration test source set (see below). In my I code I set the compile class path to
sourceSets.test.runtimeClasspath
so that I don't have the duplicate dependencies for "integrationCompile"sourceSets { integrationTest { java { srcDir 'src/integration-test/java' } resources { srcDir 'src/integration-test/resources' } compileClasspath += sourceSets.main.runtimeClasspath } }
-
Mike Rylander about 11 yearsThanks, I only needed to explicitly set the
compileClasspath
. The Runtime classpath is automatically setup asclasses + compileClasspath
-
Piohen about 11 yearsIn Gradle 1.6 you won't find
classes
. Useoutput
instead. -
Mike Rylander almost 10 yearsWould you link some documentation to support this? Thanks
-
qwertzguy almost 10 years@MikeRylander documentation about what in particular? If it's about the
+=
operator, you can see thatFileCollection
has aplus
method to support overriding the+
and+=
operator: gradle.org/docs/current/javadoc/org/gradle/api/file/… -
Mike Rylander almost 10 yearsI see that the integrationTest source set is extending the test classpath, but what is the second code block doing?
-
qwertzguy almost 10 years@MikeRylander Ah, sorry that was not meant to be part of the post. Fixed.