带有标签的 sbt testOnly 排除列表不起作用
sbt testOnly exclusion list with tag does not work
我有一个测试 class 作为
import org.scalatest.FlatSpec
import scala.collection.mutable
class Tags101Spec extends FlatSpec {
"A Stack" should "pop values in last-in-first-out order" in {
val stack = new mutable.Stack[Int]
stack.push(1)
stack.push(2)
assert(stack.pop() === 2)
assert(stack.pop() === 1)
}
it should "throw NoSuchElementException if an empty stack is popped" in {
val emptyStack = new mutable.Stack[String]
intercept[NoSuchElementException] {
emptyStack.pop()
}
}
"A String" should "return 0 size when empty" taggedAs (Fast) in {
assert("".size === 0)
}
"A Sorted List of 10 numbers" must "return 10 as the first element when reversed" taggedAs (Slow) in {
assert(10 === (1 to 10).toList.reverse.head)
}
}
在同一目录中,我有一个名为 Tags
的 class,看起来像
import org.scalatest.Tag
object Slow extends Tag("Slow Tests")
object Fast extends Tag("Fast Tests")
我 运行 我的测试使用 sbt
通过包含一个使用 -n
标志的标签并且它有效
sbt:Unit Testing in Scala> testOnly -- -n Fast
[info] Tags101Spec:
[info] A Stack
[info] A String
[info] A Sorted List of 10 numbers
[info] Run completed in 137 milliseconds.
[info] Total number of tests run: 0
[info] Suites: completed 1, aborted 0
[info] Tests: succeeded 0, failed 0, canceled 0, ignored 0, pending 0
因为只有 1
测试是 taggedAs(Fast)
,所以测试 运行 只有一个测试。
现在,我想做相反的事情,排除 Fast
标签和 运行 剩余的测试。这是我试过的
sbt:Unit Testing in Scala> testOnly -- -l Fast
[info] Tags101Spec:
[info] A Stack
[info] - should pop values in last-in-first-out order
[info] - should throw NoSuchElementException if an empty stack is popped
[info] A String
[info] - should return 0 size when empty
[info] A Sorted List of 10 numbers
[info] - must return 10 as the first element when reversed
[info] Run completed in 252 milliseconds.
[info] Total number of tests run: 4
[info] Suites: completed 1, aborted 0
[info] Tests: succeeded 4, failed 0, canceled 0, ignored 0, pending 0
如您所见,它 运行 4
测试,这是所有测试,包括 1
Fast
标记测试。
我在这里错过了什么?如何使排除标签与 sbt
一起使用?
谢谢
-l
或 -n
的参数应该是传递给 Tag
构造函数的 name
字符串参数,而不是对象的名称。例如,给定
object Slow extends Tag("SlowTests")
object Fast extends Tag("FastTests")
然后用
排除
testOnly -- -l FastTests
而不是
testOnly -- -l Fast
输出
[info] Tags101Spec:
[info] A Stack
[info] - should pop values in last-in-first-out order
[info] - should throw NoSuchElementException if an empty stack is popped
[info] A String
[info] A Sorted List of 10 numbers
[info] - must return 10 as the first element when reversed
[info] Run completed in 187 milliseconds.
[info] Total number of tests run: 3
[info] Suites: completed 1, aborted 0
[info] Tests: succeeded 3, failed 0, canceled 0, ignored 0, pending 0
[info] All tests passed.
我们看到 A string
测试没有执行。
就我个人而言,在构造 Tag
时,我会使用完全限定名称作为 name
参数
package example
import org.scalatest.Tag
object Slow extends Tag("example.Slow")
object Fast extends Tag("example.Fast")
并执行
testOnly -- -n example.Fast
输出
[info] Tags101Spec:
[info] A Stack
[info] A String
[info] - should return 0 size when empty
[info] A Sorted List of 10 numbers
[info] Run completed in 158 milliseconds.
[info] Total number of tests run: 1
[info] Suites: completed 1, aborted 0
[info] Tests: succeeded 1, failed 0, canceled 0, ignored 0, pending 0
[info] All tests passed.
我有一个测试 class 作为
import org.scalatest.FlatSpec
import scala.collection.mutable
class Tags101Spec extends FlatSpec {
"A Stack" should "pop values in last-in-first-out order" in {
val stack = new mutable.Stack[Int]
stack.push(1)
stack.push(2)
assert(stack.pop() === 2)
assert(stack.pop() === 1)
}
it should "throw NoSuchElementException if an empty stack is popped" in {
val emptyStack = new mutable.Stack[String]
intercept[NoSuchElementException] {
emptyStack.pop()
}
}
"A String" should "return 0 size when empty" taggedAs (Fast) in {
assert("".size === 0)
}
"A Sorted List of 10 numbers" must "return 10 as the first element when reversed" taggedAs (Slow) in {
assert(10 === (1 to 10).toList.reverse.head)
}
}
在同一目录中,我有一个名为 Tags
的 class,看起来像
import org.scalatest.Tag
object Slow extends Tag("Slow Tests")
object Fast extends Tag("Fast Tests")
我 运行 我的测试使用 sbt
通过包含一个使用 -n
标志的标签并且它有效
sbt:Unit Testing in Scala> testOnly -- -n Fast
[info] Tags101Spec:
[info] A Stack
[info] A String
[info] A Sorted List of 10 numbers
[info] Run completed in 137 milliseconds.
[info] Total number of tests run: 0
[info] Suites: completed 1, aborted 0
[info] Tests: succeeded 0, failed 0, canceled 0, ignored 0, pending 0
因为只有 1
测试是 taggedAs(Fast)
,所以测试 运行 只有一个测试。
现在,我想做相反的事情,排除 Fast
标签和 运行 剩余的测试。这是我试过的
sbt:Unit Testing in Scala> testOnly -- -l Fast
[info] Tags101Spec:
[info] A Stack
[info] - should pop values in last-in-first-out order
[info] - should throw NoSuchElementException if an empty stack is popped
[info] A String
[info] - should return 0 size when empty
[info] A Sorted List of 10 numbers
[info] - must return 10 as the first element when reversed
[info] Run completed in 252 milliseconds.
[info] Total number of tests run: 4
[info] Suites: completed 1, aborted 0
[info] Tests: succeeded 4, failed 0, canceled 0, ignored 0, pending 0
如您所见,它 运行 4
测试,这是所有测试,包括 1
Fast
标记测试。
我在这里错过了什么?如何使排除标签与 sbt
一起使用?
谢谢
-l
或 -n
的参数应该是传递给 Tag
构造函数的 name
字符串参数,而不是对象的名称。例如,给定
object Slow extends Tag("SlowTests")
object Fast extends Tag("FastTests")
然后用
排除testOnly -- -l FastTests
而不是
testOnly -- -l Fast
输出
[info] Tags101Spec:
[info] A Stack
[info] - should pop values in last-in-first-out order
[info] - should throw NoSuchElementException if an empty stack is popped
[info] A String
[info] A Sorted List of 10 numbers
[info] - must return 10 as the first element when reversed
[info] Run completed in 187 milliseconds.
[info] Total number of tests run: 3
[info] Suites: completed 1, aborted 0
[info] Tests: succeeded 3, failed 0, canceled 0, ignored 0, pending 0
[info] All tests passed.
我们看到 A string
测试没有执行。
就我个人而言,在构造 Tag
时,我会使用完全限定名称作为 name
参数
package example
import org.scalatest.Tag
object Slow extends Tag("example.Slow")
object Fast extends Tag("example.Fast")
并执行
testOnly -- -n example.Fast
输出
[info] Tags101Spec:
[info] A Stack
[info] A String
[info] - should return 0 size when empty
[info] A Sorted List of 10 numbers
[info] Run completed in 158 milliseconds.
[info] Total number of tests run: 1
[info] Suites: completed 1, aborted 0
[info] Tests: succeeded 1, failed 0, canceled 0, ignored 0, pending 0
[info] All tests passed.