次の注釈を使用して、統合テストにタグを付けます。
@Target({ ElementType.TYPE, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
@Tag("integration-test")
public @interface IntegrationTest {
}
これは、build.gradle
からこれらのテストを除外するためにgradle build
で使用するフィルターです。
junitPlatform {
filters {
tags {
exclude 'integration-test'
}
}
}
ここまでは順調ですね。
次に、統合テストを具体的に実行するGradleタスクを提供したいと思います。推奨されるアプローチは何ですか?
に基づく https://github.com/gradle/gradle/issues/6172#issuecomment-409883128
test {
useJUnitPlatform {
excludeTags 'integration'
}
}
task integrationTest(type: Test) {
useJUnitPlatform {
includeTags 'integration'
}
check.dependsOn it
shouldRunAfter test
}
gradlew test
は統合なしでテストを実行しますgradlew integrationTest
は統合テストのみを実行しますgradlew check
はtest
に続いてintegrationTest
を実行しますgradlew integrationTest test
はtest
に続いてintegrationTest
を実行しますshouldRunAfter
が原因で注文が入れ替わりますplugin: 'org.junit.platform.gradle.plugin'
注:上記は機能しますが、IntelliJ IDEAは何かを推測するのが難しいため、すべてを入力してコード補完を行うこのより明示的なバージョンを使用することをお勧めします完全にサポートされています:
tasks.withType(Test) { Test task ->
task.useJUnitPlatform { org.gradle.api.tasks.testing.junitplatform.JUnitPlatformOptions options ->
options.excludeTags 'integration'
}
}
task integrationTest(type: Test) { Test task ->
task.useJUnitPlatform { org.gradle.api.tasks.testing.junitplatform.JUnitPlatformOptions options ->
options.includeTags 'integration'
}
tasks.check.dependsOn task
task.shouldRunAfter tasks.test
}
私は問題を提出しました: https://github.com/junit-team/junit5/issues/579 ( Sam Brannen の提案に従います)。
一方、回避策としてプロジェクトプロパティを使用しています。
junitPlatform {
filters {
tags {
exclude project.hasProperty('runIntegrationTests') ? '' : 'integration-test'
}
}
}
その結果、統合テストはスキップされます。
gradle test
に含まれます
gradle test -PrunIntegrationTests