You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 17:48:02