使用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") { ... } })