代码之家  ›  专栏  ›  技术社区  ›  C-Otto

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

  •  0
  • C-Otto  · 技术社区  · 5 年前

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

    我看到测试旁边的“run”图标,但是运行测试会 > No tests found for given includes: [de.cotto.integration_tests.moduletwo.ModuleTest.name](filter.includeTestsMatching) .

    我的问题:

    • 为了使测试运行(使用),我需要更改什么 ./gradlew build
    • 如何让IntelliJ IDEA获取源代码集作为“测试”模块?
    • 如何从IntelliJ IDEA运行测试?
    • 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
    
    • 渐变6.4.1
    • Java 14和11
    $ ./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

    0 回复  |  直到 5 年前
        1
  •  4
  •   C-Otto    5 年前

    少了两块。下面只为 test 模块,但不是 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内部运行测试。