如何通过sbt testOnly仅运行Scala项目指定包的单元测试?
如何用sbt testOnly运行指定包下的所有测试?
刚好我日常用sbt管理Scala项目时经常遇到这类需求,结合你的项目结构(src/test/scala/notification/unit 存放单元测试),可以通过通配符匹配包路径来实现,具体用法如下:
1. 运行unit包下所有直接测试类
如果只想运行notification.unit包下的测试类(不包含其子包),直接用单个*通配符匹配包内所有类:
sbt "test:testOnly notification.unit.*"
这里的notification.unit对应你项目里的包路径,*会匹配该包下所有符合sbt测试规范的类(比如以Spec/Test结尾的类)。
2. 运行unit包及其所有子包的测试
如果你的unit包还有嵌套子包,想要一次性运行所有层级的测试,就用**通配符:
sbt "test:testOnly notification.unit.**"
**会递归匹配目标包下的所有子包及其中的测试类。
3. sbt交互模式下的简化写法
如果你已经进入了sbt的交互终端(直接输入sbt回车进入),可以不用加引号,直接输入:
testOnly notification.unit.*
这样写更简洁,适合频繁调试测试的场景。
补充小提示
- 记得包名要和代码里的声明一致(比如代码里是
package notification.unit,命令里就用这个路径),拼写错误会导致找不到测试类。 - 如果你想同时匹配多个包,比如既运行unit又运行另一个包的测试,可以用逗号分隔:
sbt "test:testOnly notification.unit.* notification.another.*"
内容的提问来源于stack exchange,提问作者ARYA
相关产品推荐
相关产品推荐

