2016-06-27 17 views
0

Kotlin Unit Testing for Function Parameter and Objectに従って、関数変数funcParamがオブジェクト関数変数であるため、関数変数funcParamをテストできました。私のユニットを作成する方法コードは(私たちはそれのために不要な一時変数を排除することができ非常に素晴らしいKotlinの機能である、)匿名/インライン化関数パラメータを使用して書かれている場合はKotlin無名関数パラメータユニットテスト

...

class MyClass1(val myObject: MyObject, val myObject2: MyObject2) { 
    fun myFunctionOne() { 
     myObject.functionWithFuncParam{ 
      num: Int -> 
      // Do something to be tested 
      myObject2.println(num) 
     } 
    } 
} 

class MyObject() { 
    fun functionWithFuncParam(funcParam: (Int) -> Unit) { 
     funcParam(32) 
    } 
} 

このコード部分をテストしてテストしますか?

または上記のように関数パラメータのインライン展開は単体テストには適していないため避けるべきですか?

答えて

0

しばらくすると、それをテストする方法を発見するには、引数キャプターを使用することです。詳細情報については

@Test 
fun myTest() { 
    val myClass1 = MyClass1(mockMyObject, mockMyObject2) 
    val argCaptor = argumentCaptor<(Int) -> Unit>() 
    val num = 1 //Any number to test 

    myClass1.myFunctionOne() 
    verify(mockMyObject).functionWithFuncParam(argCaptor.capture()) 
    argCaptor.value.invoke(num) 

    // after that you could verify the content in the anonymous function call 
    verify(mockMyObject2).println(num) 
} 

https://medium.com/@elye.project/how-to-unit-test-kotlins-private-function-variable-893d8a16b73f#.1f3v5mkql

を参照してください。