2016-06-27 2 views
0

В соответствии с Kotlin Unit Testing for Function Parameter and Object мы можем проверить функциональную переменную funcParam, так как это переменная функции объекта.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) 
    } 
} 

Как написать мой блок тест, проверяющий эту часть кода?

  num: Int -> 
      // Do something to be tested 
      myObject2.println(num) 

Или встраивание параметра функции (как описано выше) является то, что не хорошо для модульного тестирования, и, следовательно, следует избегать?

ответ

0

Через некоторое время выясните, как проверить, как использовать Argument Captor.

@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

Смежные вопросы