覆盖或隐藏从父套件继承的测试
Override or hide tests inherited from a parent suite
假设我在一个摘要 class 中有几个测试,这些测试旨在 运行 对特征的几个实现:
trait Foo {
def method1
def method2
// etc.
}
class Foo1 extends Foo { ... }
class Foo2 extends Foo { ... }
class Foo3 extends Foo { ... }
abstract class FooTest extends FunSuite with Matchers {
val foo: Foo
test("method1") { foo.method1 should equal(...) }
test("method2") { ... }
}
class Foo1Tests extends FooTests { val foo = new Foo1 }
...
不幸的是,有一些测试还没有通过 Foo2
,还有一些测试没有通过 Foo3
。将它们视为 Foo
的规范,其中不完整的实现可能已经有用。我想要一种方法将一些继承的测试标记为待处理(或完全隐藏它们)。
根据 subclasses 测试的作用将 FooTests
分解为特征不是解决方案:将来可能会添加新的 subclasses,包括在外部项目。
使用 JUnitSuite
会有所帮助,因为测试只是方法,可以正常覆盖,但可能为时已晚。
您放入摘要 class 正文中的任何代码都会被执行,就是这样。如果您希望能够排除某些测试,则需要自定义解决方案。其中之一是根据名称排除测试:
abstract class FooTest extends FunSuite with Matchers {
def excluded: Seq[String] = Seq.empty
override def test(testName: String, testTags: Tag*)(testFun: => Unit) =
if (excluded.contains(testName)) ()
else super.test(testName, testTags: _*)(testFun)
test("method1") { ... }
test("method2") { ... }
然后在subclass你可以排除一些测试如下:
class Foo1Test extends FooTest {
override def excluded = Seq("method2")
}
你当然可以想出更多的语法糖,但我认为如果它只是为了隐藏测试直到它们被实现,那么我认为不值得花更多的时间。
另请注意,使用这种方法可以完全隐藏测试,但您也可以在调用 test
.
之前标记它们、标记它们或做任何您想做的事情
假设我在一个摘要 class 中有几个测试,这些测试旨在 运行 对特征的几个实现:
trait Foo {
def method1
def method2
// etc.
}
class Foo1 extends Foo { ... }
class Foo2 extends Foo { ... }
class Foo3 extends Foo { ... }
abstract class FooTest extends FunSuite with Matchers {
val foo: Foo
test("method1") { foo.method1 should equal(...) }
test("method2") { ... }
}
class Foo1Tests extends FooTests { val foo = new Foo1 }
...
不幸的是,有一些测试还没有通过 Foo2
,还有一些测试没有通过 Foo3
。将它们视为 Foo
的规范,其中不完整的实现可能已经有用。我想要一种方法将一些继承的测试标记为待处理(或完全隐藏它们)。
根据 subclasses 测试的作用将 FooTests
分解为特征不是解决方案:将来可能会添加新的 subclasses,包括在外部项目。
使用 JUnitSuite
会有所帮助,因为测试只是方法,可以正常覆盖,但可能为时已晚。
您放入摘要 class 正文中的任何代码都会被执行,就是这样。如果您希望能够排除某些测试,则需要自定义解决方案。其中之一是根据名称排除测试:
abstract class FooTest extends FunSuite with Matchers {
def excluded: Seq[String] = Seq.empty
override def test(testName: String, testTags: Tag*)(testFun: => Unit) =
if (excluded.contains(testName)) ()
else super.test(testName, testTags: _*)(testFun)
test("method1") { ... }
test("method2") { ... }
然后在subclass你可以排除一些测试如下:
class Foo1Test extends FooTest {
override def excluded = Seq("method2")
}
你当然可以想出更多的语法糖,但我认为如果它只是为了隐藏测试直到它们被实现,那么我认为不值得花更多的时间。
另请注意,使用这种方法可以完全隐藏测试,但您也可以在调用 test
.