Анонимный параметр функции Kotlin

В соответствии с тестированием модуля Kotlin для параметра функции и объекта мы можем проверить функциональную переменную 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) 

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

Через некоторое время обнаружите, как проверить, что использовать 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