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

如何在Sbt中递归运行模块依赖的测试?

问题:在sbt模块d执行test时运行所有依赖模块的测试

我的build.sbt初始配置如下:

lazy val a = project
lazy val b = project
lazy val c = project.dependsOn(b)
lazy val d = project.dependsOn(c,a)

当在模块d上运行sbt test时,只会执行d自身的测试套件。我希望执行该命令时,能同时运行d、c、b和a所有模块的测试。

我尝试过以下配置,但没有生效:

lazy val a = project
lazy val b = project
lazy val c = project.dependsOn(b % "compile->compile;test->test")
lazy val d = project.dependsOn(c % "compile->compile;test->test", a % "compile->compile;test->test")

解决方案

  • 使用sbt testAll命令
    无需修改build.sbt,直接在模块d的上下文执行sbt testAll命令,它会自动运行当前模块及其所有依赖模块的测试,正好满足你需要的d、c、b、a全量测试需求。

  • 自定义test任务依赖
    如果希望保持用test命令触发全量测试,可以在d模块的配置中,将自身的test任务绑定到所有依赖模块的test任务上:

    lazy val a = project
    lazy val b = project
    lazy val c = project.dependsOn(b)
    lazy val d = project.dependsOn(c, a)
      .settings(
        test := (test in d).dependsOn(test in a, test in b, test in c).value
      )
    

    配置完成后,运行sbt d/test就会依次执行a、b、c、d的所有测试。

  • 关于你之前配置的说明
    你尝试的test->test依赖配置,作用是让当前模块可以引用依赖模块的测试代码(比如在d的测试里调用c的测试工具类),而不是自动触发依赖模块的测试任务,所以无法实现你的需求。

内容的提问来源于stack exchange,提问作者mich8bsp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 21:30:03