2017-09-09 1 views
0

私はKotlin + Spekフレームワークで単体テストを作成しようとしています。これまでのところよく見えますが、テストしている1つのクラスに対して複数のSpecオブジェクトが必要な場合は、定型コードをたくさん書く必要があるという問題があります。KotlinとSpekで共有オブジェクトを初期化する抽象的なSpekを作成します。

問題を説明するために私のコードです:

object MyFirstSpec : Spek({ 
    val myMock1: SomeObject1 = mock() 
    val myMock2: SomeObject2 = mock() 
    val myMock3: SomeObject3 = mock() 
    val myMock4: SomeObject4 = mock() 
    val myMock5: SomeObject5 = mock() 
    val myMock6: SomeObject6 = mock() 

    val myClass = MyClassToTest(myMock1, myMock2, myMock3, myMock4, myMock5, myMock6) 

    given("something to test here") { 
     //my test here 
    } 
}) 

object MyOtherSpec : Spek({ 
    val myMock1: SomeObject1 = mock() 
    val myMock2: SomeObject2 = mock() 
    val myMock3: SomeObject3 = mock() 
    val myMock4: SomeObject4 = mock() 
    val myMock5: SomeObject5 = mock() 
    val myMock6: SomeObject6 = mock() 

    val myClass = MyClassToTest(myMock1, myMock2, myMock3, myMock4, myMock5, myMock6) 

    given("something else to test here") { 
     // my test here 
    } 
}) 

私はなど私のモックを定義し、その継承した後、または、私の仕様を越え何とかそれを共有する「抽象」SPEKを作成するのが大好きです。

これを達成する方法はありますか?

答えて

0

残念ながら、抽象的なSpekまたは継承を作成する方法が見つかりませんでしたが、希望の結果を得るためにFixturesを使用する方法を見つけました。

は、ここでそれを証明する私の擬似コードです:

object MySpec: Spek({ 
    describe("my tests with Fixtures") { 
     val myMock1: SomeObject1 = mock() 
     val myMock2: SomeObject2 = mock() 
     val myMock3: SomeObject3 = mock() 
     val myMock4: SomeObject4 = mock() 
     val myMock5: SomeObject5 = mock() 
     val myMock6: SomeObject6 = mock() 

     val myClass = MyClassToTest(myMock1, myMock2, myMock3, myMock4, myMock5, myMock6) 

     afterEachTest { 
      reset(myMock1, myMock2, myMock3, myMock4, myMock5, myMock6) 
      //or we can just clear invocations, if we don't want to reset the mocks 
      //clearInvocations(myMock1, myMock2, myMock3, myMock4, myMock5, myMock6) 
     } 

     context("my first context for testing") { 
      //initialization logic here specific for this context 
      val somethingSpecificHere = MySpecificLogicObject() 
      beforeEachTest { 
       whenever(myMock1.doSomething()).thenReturn(someResult) 
      } 
      on ("calling the method i'm testing"){ 
       myClass.myMethod(somethingSpecificHere) 

       it ("should do what expected") { 
        //verifies go here 
       } 
      } 
     } 
     context("my seconds context for testing") { 
      //second context specific code 
     } 
    } 
}) 

は、それが同じ問題

を持っていた誰かのために役立つことを願っています
関連する問題