2017-09-28 10 views
-1

私はSpekをテストフレームワークとして使用しており、基底クラスに対していくつかのテストステップを共有する際に問題があります。spekでテストし、基底クラス用のいくつかの基本テストケースを共有する

私は抽象基本クラスと2つの派生クラスを持っています。どのように私は分類のためのものSpeksを作成することができますが、唯一のベースSPEKに一度send()ためのテストを定義します。

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

今、私の質問はありますか?

マイ最初のアプローチ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の今後のリリースで起こりうる変更について、これをSpek-Authorに注目させるべきでしょうか?

+0

ダウンボートしたときにコメントしてください。著者は、間違いが何であったのかを知り、将来的により良い質問を書くべきである。 – guenhter

答えて

1

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") { ... } 
}) 
関連する問題