如何验证是否在参数具有 lambda 表达式的模拟对象上调用函数

How to verify whether a function is called on a mock object who parameter has a lambda expression

假设我有一个名为

的函数
fun doSomething() {
    customObject.callThis(10, 20)
}

而 customObject 是 class CustomObject 的对象,它是使用 Mockito 模拟的。下面是为上面的代码编写的单元测试。

@Test
fun doSomething() {
    // Call the doSomething() function
    verify(customObject).callThis(10, 20)
}

这非常有效。现在,当我们编写如下 doSomething 函数时,我的疑问来了。

fun doSomething() {
    customObject.callThis(10, { navigation.finish() })
}

其中导航是 class 导航的模拟对象。现在,如何测试上述功能?

如果您使用的是 mockito-kotlin,您可以执行以下操作:

import com.nhaarman.mockitokotlin2.inOrder
import com.nhaarman.mockitokotlin2.eq
import com.nhaarman.mockitokotlin2.any

inOrder {
    verify(customObject).callThis(eq(10), any())
    verify(navigation).finish()
}