首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Gradle:使集成测试源模块工作

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

Stack Overflow用户
提问于 2020-05-16 12:25:27
回答 1查看 5.8K关注 0票数 3

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

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

我的问题:

  • 为了使测试运行(使用./gradlew build),我需要更改什么?
  • 如何使IntelliJ IDEA将源代码集作为“测试”模块来获取?
  • 如何从IntelliJ IDEA运行测试?
  • 有模块的Java 14的加分(提交)

源集定义:

代码语言:javascript
运行
复制
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级
  • JUnit 5
  • Java 14和11
  • 有和没有Java模块(JPMS、Jigsaw)
  • IntelliJ IDEA 2020.1.2
代码语言:javascript
运行
复制
$ ./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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-16 13:38:39

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

代码语言:javascript
运行
复制
test {
    useJUnitPlatform()
}

因此,有必要采取以下措施之一:

代码语言:javascript
运行
复制
integrationTest {
    useJUnitPlatform()
}

代码语言:javascript
运行
复制
tasks.withType(Test) {
    useJUnitPlatform()
}

此外,JUnit运行时无法用于集成测试。可以通过包括测试运行时依赖项来解决这个问题:

使用integrationTestRuntimeOnly.extendsFrom runtimeOnly代替integrationTestRuntimeOnly.extendsFrom testRuntimeOnly

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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61836692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档