首页 > 解决方案 > 如何在 sbt 中运行和编译准确的一项测试?

问题描述

我正在处理一个使用 SBT 用 Scala 编写的遗留项目。单元测试是用 ScalaTest 编写的。问题是有很多测试类有编译错误。

我只想运行这些测试类中的一个,并且我知道只运行一个测试我应该尝试这样的事情:

test:testOnly *myClass

但是当我运行这个命令时,SBT 将尝试编译整个项目,正如我所说,有很多测试类有编译错误。有什么方法可以准确地告诉 SBT 哪些类需要编译,而其他类将被忽略?

标签: scalasbtscalatest

解决方案


考虑像这样定义一个单参数自定义命令build.sbt

commands += Command.single("compileAndTestOnly") { (state, file) =>
  s"""set sources in Test := (sources in Test).value.filter(_.name.contains("$file"))""" ::
    "test" :: state
}

现在运行它compileAndTestOnly MySpec.scala。此命令将Test / sources设置修改为仅包含一个文件,如下所示

sources in Test := (sources in Test).value.filter(_.name.contains(file))

注意sources in Compile保持不变。之后它执行test实际上编译并运行单个测试。

这个答案的灵感来自0__


推荐阅读