Gradle:使集成测试源模块工作

C-O*_*tto 7 java integration-testing intellij-idea gradle

我有一个简单的多模块 Java Gradle 项目。单元测试运行良好,但我无法添加用于集成测试的工作源集。测试已编译(我看到编译错误),并出现在控制台输出中,但它们没有执行(现有测试应该失败)。

此外,在 IntelliJ IDEA 中,显示了源集,但不是作为测试模块。我在测试旁边的装订线中看到“运行”图标,但运行测试会给出 > No tests found for given includes: [de.cotto.integration_tests.moduletwo.ModuleTest.name](filter.includeTestsMatching).

我的问题:

  • 为了使测试运行(使用./gradlew build),我需要更改什么?
  • 如何让 IntelliJ IDEA 选择源集作为“测试”模块?
  • 如何从 IntelliJ IDEA 运行测试?
  • 带模块的 Java 14 的奖励积分(提交

源集定义:

sourceSets {
    integrationTest {
        compileClasspath += sourceSets.main.output
        runtimeClasspath += sourceSets.main.output
    }
}

configurations {
    integrationTestImplementation.extendsFrom testImplementation
    integrationTestRuntimeOnly.extendsFrom runtimeOnly
}

task integrationTest(type: Test) {
    description = 'Runs integration tests.'
    group = 'verification'

    testClassesDirs = sourceSets.integrationTest.output.classesDirs
    classpath = sourceSets.integrationTest.runtimeClasspath
    shouldRunAfter test
}

check.dependsOn integrationTest
Run Code Online (Sandbox Code Playgroud)
  • 摇篮6.4.1
  • J单元5
  • Java 14 和 11
  • 带或不带 Java 模块(JPMS、Jigsaw)
  • IntelliJ IDEA 2020.1.2
$ ./gradlew clean check --no-build-cache --console=plain
> Task :module-one:clean
> Task :module-two:clean
> Task :module-two:processResources NO-SOURCE
> Task :module-two:processTestResources NO-SOURCE
> Task :module-two:processIntegrationTestResources NO-SOURCE
> Task :module-one:compileJava
> Task :module-one:processResources NO-SOURCE
> Task :module-one:classes
> Task :module-two:compileJava
> Task :module-two:classes
> Task :module-one:compileTestJava
> Task :module-one:processTestResources NO-SOURCE
> Task :module-one:testClasses
> Task :module-two:compileTestJava
> Task :module-two:testClasses
> Task :module-two:compileIntegrationTestJava
> Task :module-two:integrationTestClasses
> Task :module-one:test
> Task :module-one:check
> Task :module-one:jar
> Task :module-two:test
> Task :module-two:integrationTest <-- What happens here? Why doesn't the test fail?
> Task :module-two:check

BUILD SUCCESSFUL in 2s
11 actionable tasks: 11 executed
Run Code Online (Sandbox Code Playgroud)

源代码: https: //github.com/C-Otto/gradle-integration-tests

C-O*_*tto 13

两块不见了。以下仅定义了test模块的 JUnit,但没有定义integrationTest. 请参阅https://discuss.gradle.org/t/integration-tests-not-being-run/28745

test {
    useJUnitPlatform()
}
Run Code Online (Sandbox Code Playgroud)

因此,需要满足以下条件之一:

integrationTest {
    useJUnitPlatform()
}
Run Code Online (Sandbox Code Playgroud)

或者

tasks.withType(Test) {
    useJUnitPlatform()
}
Run Code Online (Sandbox Code Playgroud)

此外,JUnit 运行时不可用于集成测试。这可以通过包含测试运行时依赖项来修复:

而不是integrationTestRuntimeOnly.extendsFrom runtimeOnly使用integrationTestRuntimeOnly.extendsFrom testRuntimeOnly.

如果我添加这两个更改,测试将使用./gradlew check. 我还可以从 IntelliJ IDEA 内部运行测试。