英文:
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.
专注分享java语言的经验与见解,让所有开发者获益!
评论