Search code examples
javagradlebuildintegration-testingsource-sets

How do I add a new sourceset to Gradle?


I want to add integration tests to my Gradle build (Version 1.0). They should run separately from my normal tests because they require a webapp to be deployed to localhost (they test that webapp). The tests should be able to use classes defined in my main source set. How do I make this happen?


Solution

  • Update for 2021:

    A lot has changed in 8ish years. Gradle continues to be a great tool. Now there's a whole section in the docs dedicated to configuring Integration Tests. I recommend you read the docs now.

    Original Answer:

    This took me a while to figure out and the online resources weren't great. So I wanted to document my solution.

    This is a simple gradle build script that has an intTest source set in addition to the main and test source sets:

    apply plugin: "java"
    
    sourceSets {
        // Note that just declaring this sourceset creates two configurations.
        intTest {
            java {
                compileClasspath += main.output
                runtimeClasspath += main.output
            }
        }
    }
    
    configurations {
        intTestCompile.extendsFrom testCompile
        intTestRuntime.extendsFrom testRuntime
    }
    
    task intTest(type:Test){
        description = "Run integration tests (located in src/intTest/...)."
        testClassesDir = project.sourceSets.intTest.output.classesDir
        classpath = project.sourceSets.intTest.runtimeClasspath
    }