使用spek进行测试,并为基类共享一些基本测试用例

我使用Spek作为测试框架,并且在共享基类的一些测试步骤时遇到麻烦。

我有一个抽象基类和两个派生类。

abstract class Base { abstract fun send() } class Foo : Base() { override fun send() {} fun anotherFunction() { } } class Bar : Base() { override fun send() {} fun differentFunction() { } } 

现在我的问题是:如何为这些分类创建Speks,但只在基本spek中定义一次send()的测试?

我的第一个方法是使用SubjectSpek

 class BaseSpek : SubjectSpek<Base>({ subject { // ??? Can't instantiate Base because it is abstract } it("test the base") { ... } }) class FooSpek : SubjectSpek<Foo>({ itBehavesLike(BaseSpek) it("test anotherFunction") { ... } }) 

我的第二个方法是使用继承:

 abstract class BaseSpek(base: Base) : Spek({ it("test the base") { ... } }) abstract class FooSpek() : BaseSpek(???) 

我的方法似乎没有任何工作。 任何建议如何解决这个问题? 我是否应该将此引起Spek-Author关注Spek将来版本的可能变化?

SubjectSpek是正确的方法。

 abstract class BaseSpec: SubjectSpek<Base>({ it("test base") { ... } }) object FooSpec: BaseSpec<Foo>({ subject { ... } // ugly for now, until Spek supports @Ignore itBehavesLike(object: BaseSpec() {}) it("test another") { ... } })