Kotlin Función anónima Parámetro Unidad de testing

De acuerdo con Kotlin Unit Testing para Function Parameter and Object , podríamos probar la variable de function funcParam , ya que es una variable de function de object.

Sin embargo, si el código se escribe utilizando el parámetro de function anónimo / en línea (que es una característica muy buena de Kotlin, que nos permite eliminar variables temporales innecesarias para ello) …

 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) } } 

¿Cómo escribir mi testing unitaria que testing esta parte del código?

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

¿O la alignment del parámetro de la function (como arriba) es algo que no es bueno para la testing unitaria, y por lo tanto debería evitarse?

Después de un time, descubra la forma de probarlo utilizando 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) } 

Para get más información, consulte https://medium.com/@elye.project/how-to-unit-test-kotlins-private-function-variable-893d8a16b73f#.1f3v5mkql

  • Burlarse del campo final con Kotlin
  • ¿Cómo debo probar las funciones de extensión de Kotlin?
  • ¿Cómo se testing el código que llama a funciones de nivel superior en Kotlin?