我知道可以通过在 sbt 中运行来运行单个测试,
testOnly *class -- -n Tag
有没有办法告诉 sbt/scalatest 在没有标签的情况下运行单个测试?例如:
testOnly *class -- -X 2
这意味着“在课堂上运行第二个测试。不管它是什么”。我们有一堆测试,没有人费心标记它们,那么有没有办法在没有标记的情况下运行单个测试?
现在在交互模式下支持(从 ScalaTest 2.1.3 开始):
testOnly *MySuite -- -z foo
仅运行名称包含子字符串“foo”的测试。
对于完全匹配而不是子字符串,请使用-t
代替-z
.
我看不到在测试类中运行单个未标记测试的方法,但我提供了我的工作流程,因为它似乎对遇到这个问题的任何人都有用。
在 sbt 会话中:
test:testOnly *YourTestClass
(星号是通配符,您可以指定完整路径com.example.specs.YourTestClass
。)
该测试类中的所有测试都将被执行。大概您最关心失败的测试,因此更正任何失败的实现,然后运行:
test:testQuick
...只会执行失败的测试。(重复最近执行的test:testOnly
命令与test:testQuick
本例相同,但如果您将测试方法分解为适当的测试类,则可以使用通配符以test:testQuick
更有效的方式重新运行失败的测试。)
请注意,ScalaTest 中的 test 命名法是一个测试类,而不是特定的测试方法,因此所有未标记的方法都会被执行。
如果您在测试类中有太多测试方法,请将它们分成单独的类或适当地标记它们。(这可能表明被测类违反了单一职责原则,可以使用重构。)
只是为了简化泰勒的例子。
test:
-prefix 不是必需的。
所以根据他的例子:
在sbt
- 控制台中:
testOnly *LoginServiceSpec
在终端:
sbt "testOnly *LoginServiceSpec"
这是关于使用跑步者的 Scalatest 页面以及关于和选项的扩展讨论-t
-z
。
这篇文章展示了哪些命令适用于使用FunSpec
.
这是测试文件:
package com.github.mrpowers.scalatest.example
import org.scalatest.FunSpec
class CardiBSpec extends FunSpec {
describe("realName") {
it("returns her birth name") {
assert(CardiB.realName() === "Belcalis Almanzar")
}
}
describe("iLike") {
it("works with a single argument") {
assert(CardiB.iLike("dollars") === "I like dollars")
}
it("works with multiple arguments") {
assert(CardiB.iLike("dollars", "diamonds") === "I like dollars, diamonds")
}
it("throws an error if an integer argument is supplied") {
assertThrows[java.lang.IllegalArgumentException]{
CardiB.iLike()
}
}
it("does not compile with integer arguments") {
assertDoesNotCompile("""CardiB.iLike(1, 2, 3)""")
}
}
}
此命令在iLike
描述块中运行四个测试(来自 SBT 命令行):
testOnly *CardiBSpec -- -z iLike
您也可以使用引号,所以这也可以:
testOnly *CardiBSpec -- -z "iLike"
这将运行一个测试:
testOnly *CardiBSpec -- -z "works with multiple arguments"
这将运行以 "works with" 开头的两个测试:
testOnly *CardiBSpec -- -z "works with"
我无法-t
选择在CardiBSpec
文件中运行任何测试。此命令不运行任何测试:
testOnly *CardiBSpec -- -t "works with multiple arguments"
-t
当测试没有嵌套在describe
块中时,该选项似乎有效。我们再来看看另一个测试文件:
class CalculatorSpec extends FunSpec {
it("adds two numbers") {
assert(Calculator.addNumbers(3, 4) === 7)
}
}
-t
可用于运行单个测试:
testOnly *CalculatorSpec -- -t "adds two numbers"
-z
也可用于运行单个测试:
testOnly *CalculatorSpec -- -z "adds two numbers"