Gradle + SpringBoot: 在构建任务中未执行 :integrationTest 部分。

huangapple 未分类评论56阅读模式
英文:

Gradle + SpringBoot: :integrationTest not executed in build task

问题

我在执行 build 任务中的集成测试部分时遇到了问题。

输入:

  • Java 11
  • Gradle 6.5.1
  • 集成测试使用 Spock(Groovy)
  • Spring Boot 2.2.x

项目结构:

    项目根目录
    |_build.gradle
    |_src
        |_integration[integrationTest]
        |   |_groovy
        |   |_resources
        |_test[unitTest]
        |_main[code]

build.gradle 文件中我有以下配置:

build.dependsOn(integrationTest)
compileJava.dependsOn(processResources)
compileGroovy.dependsOn(processResources)

test {
    useJUnitPlatform()
}

integrationTest {
    useJUnitPlatform()
}

当运行 ./gradlew integrationTest 时一切正常。
但是当我使用 ./gradlew clean build --debug 时,构建成功完成,但集成测试没有被触发。在日志中我能找到以下内容:

[class org.gradle...TaskExecutionLogger] > Task :integrationTest NO-SOURCE
[org...DefaultBuildOperationExecutor] Build operation 'Task :integrationTest' started
[org.gradle...ResolveTaskExecutionModeExecuter] 将任务 ':integrationTest' 的任务产物状态放入上下文中花费了 0.0 秒。
[org.gradle...DirectoryFileTree] 文件或目录 '/Users/.../build/classes/java/integrationTest' 未找到
[org.gradle...DirectoryFileTree] 文件或目录 '/Users/.../build/classes/groovy/integrationTest' 未找到
[org.gradle...DefaultEmptySourceTaskSkipper] 由于没有源文件和先前的输出文件,跳过任务 ':integrationTest'。
[org.gradle...ResolveTaskExecutionModeExecuter] 从上下文中删除任务 ':integrationTest' 的任务产物状态。
[org.gradle...DefaultBuildOperationExecutor] 完成构建操作 'Task :integrationTest'。
[org.gradle...DefaultBuildOperationExecutor] 构建操作 'Task :integrationTest' 已完成
英文:

I have problem with executing integration test like part on build task.

Input:

  • Java 11
  • Gradle 6.5.1
  • integration Tests Spock(groovy)
  • Spring Boot 2.2.x
    Project structure:
    |_build.gradle
    |_src
        |_integration[integrationTest]
        |   |_groovy
        |   |_resources
        |_test[unitTest]
        |_main[code]
    
    

In build.gradle file I do have:

build.dependsOn(integrationTest)
compileJava.dependsOn(processResources)
compileGroovy.dependsOn(processResources)

test {
    useJUnitPlatform()
}

integrationTest {
    useJUnitPlatform()
}

When running ./gradlew integrationTest all fine.
But when using ./gradlew clean build --debug all build successfully but integration test not triggered. In the logs I can find this:

[class org.gradle...TaskExecutionLogger] > Task :integrationTest NO-SOURCE
[org...DefaultBuildOperationExecutor] Build operation 'Task :integrationTest' started
[org.gradle...ResolveTaskExecutionModeExecuter] Putting task artifact state for task ':integrationTest' into context took 0.0 secs.
[org.gradle...DirectoryFileTree] file or directory '/Users/.../build/classes/java/integrationTest', not found
[org.gradle...DirectoryFileTree] file or directory '/Users/.../build/classes/groovy/integrationTest', not found
[org.gradle...DefaultEmptySourceTaskSkipper] Skipping task ':integrationTest' as it has no source files and no previous output files.
[org.gradle...ResolveTaskExecutionModeExecuter] Removed task artifact state for task ':integrationTest' from context.
[org.gradle...DefaultBuildOperationExecutor] Completing Build operation 'Task :integrationTest'
[org.gradle...DefaultBuildOperationExecutor] Build operation 'Task :integrationTest' completed

答案1

得分: 0

找到了根本原因。服务使用了GRPC,并且构建过程包括生成proto部分。在生成proto文件的过程中,系统进行了清理操作,导致测试上下文变为空。这就是为什么./gradlew integrationTest可以正常工作,而./gradlew clean build不会触发测试的原因。

英文:

Found the root cause. Service using GRPC and build process includes generating proto part. During proto generation system doing clean and test context become empty. That why ./gradlew integrationTest works fine and ./gradlew clean build does not triggers tests.

huangapple
  • 本文由 发表于 2020年7月23日 21:06:24
  • 转载请务必保留本文链接:https://java.coder-hub.com/63055011.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定