27

次の注釈を使用して、統合テストにタグを付けます。

@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 タスクを提供したいと思います。推奨されるアプローチは何ですか?

4

4 に答える 4

56

https://github.com/gradle/gradle/issues/6172#issuecomment-409883128に基づく

遅延タスク構成と Gradle 5 を考慮に入れるために 2020 年に修正されました。古いバージョンについては、回答の履歴を参照してください。

plugins {
    id "java"
}

def test = tasks.named("test") {
    useJUnitPlatform {
        excludeTags "integration"
    }
}

def integrationTest = tasks.register("integrationTest2", Test) {
    useJUnitPlatform {
        includeTags "integration"
    }
    shouldRunAfter test
}

tasks.named("check") {
    dependsOn integrationTest
}

ランニング

  • gradlew test統合せずにテストを実行します
  • gradlew integrationTest統合テストのみを実行します
  • gradlew checktest続いて実行されますintegrationTest
  • gradlew integrationTest testが実行され、その後に 注記がtest続きます。integrationTest
    shouldRunAfter

歴史

ヒント

注:上記は機能しますが、IntelliJ IDEA は物事を推測するのに苦労しているため、すべてが入力され、コード補完が完全にサポートされているこのより明示的なバージョンを使用することをお勧めします

... { Test task ->
    task.useJUnitPlatform { org.gradle.api.tasks.testing.junitplatform.JUnitPlatformOptions options ->
        options.includeTags 'integration'
    }
}

build.gradle.kts

Gradle 5.6.4 のすべてのモジュールで統合テストを構成するためのルート プロジェクト Kotlin DSL ドロップイン

allprojects {
    plugins.withId("java") {
        @Suppress("UnstableApiUsage")
        this@allprojects.tasks {
            val test = "test"(Test::class) {
                useJUnitPlatform {
                    excludeTags("integration")
                }
            }
            val integrationTest = register<Test>("integrationTest") {
                useJUnitPlatform {
                    includeTags("integration")
                }
                shouldRunAfter(test)
            }
            "check" {
                dependsOn(integrationTest)
            }
        }
    }
}
于 2018-09-09T13:34:15.603 に答える
1

グラドル6

Gradle の動作が変更されたためかどうかはわかりませんが、投票数が最も多かった回答が Gradle で機能しませんでした。6.8.3. メインのテスト タスクと一緒に integrationTests タスクが実行されるのを見ていました。この簡略化されたバージョンは私にとってはうまくいきました:

test {
    useJUnitPlatform {
        excludeTags "integration"
    }
}

tasks.register("integrationTests", Test) {
    useJUnitPlatform {
        includeTags "integration"
    }
    mustRunAfter check
}

コマンド:

  • ./gradlew testまたは- 「統合」タグなしで./gradlew clean buildテストを実行します。
  • ./gradlew integrationTests - 「統合」タグを使用したテストのみを実行します。
于 2021-05-18T08:44:04.397 に答える