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

标签 java gradle intellij-idea integration-testing

我有一个简单的多模块 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 的奖励积分 (commit)

  • 源集定义:
    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
    
  • Gradle 6.4.1
  • JUnit 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
    

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

    最佳答案

    两片不见了。以下仅为 test 定义 JUnit模块,但不是 integrationTest .见 https://discuss.gradle.org/t/integration-tests-not-being-run/28745 .

    test {
        useJUnitPlatform()
    }
    

    因此,必须满足以下条件之一:
    integrationTest {
        useJUnitPlatform()
    }
    

    或者
    tasks.withType(Test) {
        useJUnitPlatform()
    }
    

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

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

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

    关于java - Gradle:使集成测试源模块工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61836692/

    相关文章:

    java - 如何使用 Spring Boot 和 IntelliJ Idea 从数据库生成实体类?

    java - Scala:在 Scala 中使用带有子类的 Java 构造函数

    java - StringBuffer setLength 与子字符串

    jenkins - 从 Jenkinsfile 调用 gradlew

    gradle - 如何将Spring Security与dotCMS集成

    java - IntelliJ 在调试前卡住大约 30 秒

    java - 一个识别由给定三个单词的任意组合组成的单词的程序

    java - 比较多个字符串时切换大小写与 If, else

    android - 任务 'install' 在根项目 'TestApp' 中不明确。候选为: 'installDebug' , 'installDebugAndroidTest'

    java - 使用 Spring Boot 和多模块的 Maven 配置 - 在 Intellij 中运行应用程序