2017-09-09 4 views
0

Kotlin + Spek 프레임 워크로 단위 테스트를 작성하려고합니다. 지금까지는 꽤 괜찮은 것처럼 보이지만 테스트 할 클래스에 대해 여러 개의 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 
     } 
    } 
}) 

이 같은 문제

을 가지고 사람을 위해 도움이 될 것입니다 희망