如何在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
相关产品推荐
相关产品推荐

