Gradle跨模块运行Spock集成测试路径配置问题
解决Gradle集成测试任务NO-SOURCE问题
这个问题我碰到过好多次,核心原因就是Gradle默认的integrationTest任务预期的源码路径和你的实际目录结构不匹配——它默认去找src/integrationTest/groovy,但你的集成测试代码实际放在integrationTest/src/test/groovy,所以Gradle找不到源码,直接跳过了任务。
下面是具体的修复步骤,直接修改你的build.gradle文件就行:
1. 重新指定IntegrationTest的源码目录
在build.gradle里添加或更新sourceSets配置,把集成测试的源码路径指向你实际的目录:
sourceSets { integrationTest { groovy { srcDir file('integrationTest/src/test/groovy') } // 如果你的集成测试有资源文件(比如配置文件),也加上这行 resources { srcDir file('integrationTest/src/test/resources') } // 让集成测试能访问主代码和普通测试代码的编译结果 compileClasspath += sourceSets.main.output + sourceSets.test.output runtimeClasspath += sourceSets.main.output + sourceSets.test.output } }
2. 确保IntegrationTest任务关联正确的配置
如果你的integrationTest任务是自定义的,或者用了官方的测试插件,要确保任务和上面配置的sourceSet绑定:
task integrationTest(type: Test) { description = '执行集成测试' group = 'Verification' // 指定测试类的输出目录和类路径 testClassesDirs = sourceSets.integrationTest.output.classesDirs classpath = sourceSets.integrationTest.runtimeClasspath // 可选:自定义测试报告的输出位置,方便查看结果 reports { html.outputLocation = file("$buildDir/reports/integrationTests") junitXml.outputLocation = file("$buildDir/test-results/integrationTests") } } // 让clean任务顺便清理集成测试的输出文件 clean { delete sourceSets.integrationTest.output }
3. 验证配置是否生效
修改完配置后,先跑gradle integrationTest --info看看日志,确认Gradle已经能识别到integrationTest/src/test/groovy下的测试文件了,之后再执行gradle clean integrationTest应该就能正常运行集成测试,不会再出现NO-SOURCE的提示。
另外别忘了确认你已经应用了必要的插件,比如Groovy和Java插件:
plugins { id 'groovy' id 'java' }
内容的提问来源于stack exchange,提问作者YK-47
相关产品推荐
相关产品推荐

