CircleCI运行Gradle测试报No tests found for given includes怎么解决
问题根因
- 测试类全限定名提取错误:你当前的脚本直接将测试文件完整路径的所有斜杠替换为点,没有剔除路径中的模块名、
src/test/kotlin/这类前缀,最终生成的类名是类似core.src.test.kotlin.com.yourpackage.FirstTest的格式,而Gradle的--tests参数需要的是不带路径前缀的类全限定名(如com.yourpackage.FirstTest),因此Gradle无法定位到对应测试类。 - 多模块项目测试任务适配缺失:如果你的项目是多模块结构,直接在根目录执行
./gradlew test会触发所有子模块的test任务,每个子模块的test任务只会扫描自身模块内的测试类,跨模块传入的--tests参数会导致没有对应测试类的模块抛出找不到测试的错误。
解决方案
修改测试执行步骤的脚本,修正类名提取逻辑并增加无测试时的容错配置,修改后的配置如下:
- run: name: Run split tests command: | # 提取测试文件并裁剪路径前缀,生成正确的全限定类名 CLASSNAMES=$(circleci tests glob "**/src/test/kotlin/**/*Test.kt" \ | sed -E 's/.*src\/test\/kotlin\///' \ | sed 's@/@.@g' \ | sed 's/\.kt$//' \ | circleci tests split --split-by=timings --timings-type=classname) # 拼接Gradle运行参数,增加--no-fail-if-no-tests避免无测试的子模块报错 GRADLE_ARGS=$(echo $CLASSNAMES | awk '{for (i=1; i<=NF; i++) print "--tests",$i}') echo "Prepared arguments for Gradle: $GRADLE_ARGS" ./gradlew test $GRADLE_ARGS --no-fail-if-no-tests
额外注意事项
如果你使用的是JUnit 5,需要在对应模块的build.gradle中开启JUnit Platform支持,配置参考:
test { useJUnitPlatform() }
内容的提问来源于stack exchange,提问作者The Blues
相关产品推荐
相关产品推荐

