我知道可以通过在sbt中运行来运行单个测试,
testOnly *class -- -n Tag
有没有办法告诉sbt / scalatest运行不带标签的单个测试?例如:
testOnly *class -- -X 2
这将意味着“运行班级中的第二个测试。无论它是什么”。我们有很多测试,没有人打扰他们,所以有没有办法在没有标签的情况下运行单个测试?
sbt
用引号将所有内容括起来,例如sbt "test-only *SingleTestSuite"
我知道可以通过在sbt中运行来运行单个测试,
testOnly *class -- -n Tag
有没有办法告诉sbt / scalatest运行不带标签的单个测试?例如:
testOnly *class -- -X 2
这将意味着“运行班级中的第二个测试。无论它是什么”。我们有很多测试,没有人打扰他们,所以有没有办法在没有标签的情况下运行单个测试?
sbt
用引号将所有内容括起来,例如sbt "test-only *SingleTestSuite"
Answers:
现在(在ScalaTest 2.1.3起)在交互模式下受支持:
testOnly *MySuite -- -z foo
仅运行名称包含子字符串“ foo”的测试。
要获得完全匹配而不是子字符串,请使用-t
代替-z
。
-t
用于精确匹配的工作示例?我无法使其正常工作。
src/it
),则需要添加it
到testOnly
。例如,在命令行上:sbt "it:testOnly *MyIntegrationTestSuite"
。
when
并且should
可以在测试之间重复。要选择一个特定的测试,我需要说“名称包含此AND那”。
我想添加一个具体的例子来伴随其他答案
您需要指定要测试的类的名称,因此如果您具有以下项目(这是一个Play项目):
您可以Login
通过从SBT控制台运行以下命令来仅测试测试:
test:testOnly *LoginServiceSpec
如果从SBT控制台外部运行命令,则应执行以下操作:
sbt "test:testOnly *LoginServiceSpec"
sbt "test:testOnly *LoginServiceSpec"
testOnly *LoginServiceSpec
和外部:sbt "testOnly *LoginServiceSpec"
我看不到在测试类中运行单个未加标签的测试的方法,但是我提供了工作流,因为它对于遇到此问题的任何人似乎都很有用。
在sbt会话中:
test:testOnly *YourTestClass
(星号是通配符,您可以指定完整路径com.example.specs.YourTestClass
。)
该测试类中的所有测试都将执行。大概您最担心失败的测试,因此请更正所有失败的实现,然后运行:
test:testQuick
...只会执行失败的测试。(重复最近执行的test:testOnly
命令与test:testQuick
这种情况相同,但是如果将测试方法分解为适当的测试类,则可以使用通配符来test:testQuick
更有效地重新运行失败的测试。)
请注意,ScalaTest中用于测试的术语是测试类,而不是特定的测试方法,因此将执行所有未标记的方法。
如果测试类中的测试方法太多,则将它们分成单独的类或对其进行适当的标记。(这可能表明被测类违反了单一责任原则,可以使用重构。)
*YourTestClass
必须为类名。不是文件名。
这是有关使用跑步小人的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
describe块中运行四个测试(从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"
如果您想运行这些示例,请参阅此仓库。