Gradle で Integration Test


自動化されたテストにデータベースなどが絡んでいると、実行に時間がかかるようになってしまいます。単体テストと結合テストに分けて、単体テストを気軽に実行できるようにしておきましょう。毎回結合された状態でテストできる方がテストの精度が上がりそうですが、時間がかかってテストを行わなくなると本末転倒です。

Gradle を使う場合は、 https://www.petrikainulainen.net/programming/gradle/getting-started-with-gradle-integration-testing/ の記事が良かったので結論だけメモしておきます。

sourceSets {
    integrationTest {
        java {
            compileClasspath += main.output + test.output
            runtimeClasspath += main.output + test.output
            srcDir file('src/integration-test/java')
        }
        resources.srcDir file('src/integration-test/resources')
    }
}

configurations {
    integrationTestCompile.extendsFrom testCompile
    integrationTestRuntime.extendsFrom testRuntime
}

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

単体テストと同様に書いて、 src/integration-test/java に配置し、 gradle integrationTest で実行します。 integrationTest のみで利用するライブラリは、 dependenciesintegrationTestCompile で指定します。