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) 

或者函数参数的内联(如上)对于单元测试是不利的,因此应该避免?

一段时间后发现测试的方法是使用参数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