如何在模拟类中调用特定的lambda?

我有下一个案例的参数:

@Test fun lostClick() { //setup parameters val func0 : (Unit) -> Unit = { println("fun0")} val func1 : (String) -> Unit = { println("fun1")} val func2 : (Int) -> Unit = { println("fun2")} whenever(deviceInteractor.reserveBadCaseDevice( //equals `when` eq(workerId), eq(DeviceCondition.LOST), eq(func0), eq(func1), eq(func2))).then({ func0.invoke(Unit) }) presenter.lostClick() //view reaction verify(viewState).showLoad(true) // verify(viewState).setButtonGiveEnabled(true) // if func0 called this verify works // verify(viewState).setButtonTakeEnabled(false) // verify(viewState).setButtonCrashEnabled(false) // verify(viewState).setButtonLostEnabled(false) // verify(viewState).showLoad(false) } 

但是这不起作用。 func0不叫。 在我的主持人这个方法看到这个:

 fun lostClick() { reserveBadCaseUser(DeviceCondition.LOST) } private fun reserveBadCaseUser(condition: DeviceCondition) { showLoad(true) //condition == DeviceCondition.LOST deviceInteractor.reserveBadCaseDevice(mCurrentWorker?.id!!, condition, { clearCurrentDevice() validateButtonView() showLoad(false) }, { showLoad(false) viewState.showErrorToast(it) }, { showLoad(false) viewState.showErrorToast(it) }) } 

调用showLoad(true),然后调用reserveBadCaseDevice不起作用。 我在test中检查了deviceInteractor,并且演示者是一个引用,演示者有需要的值(workerId和DeviceCondition),但是方法reserveBadCaseDevice没有调用所有东西。

如何测试我的演示者方法reserveBadCaseUser当这个使用类与三重lambda函数的方法? 或者如何正确地模拟deviceInteractor这将被称为第一lamda?

deviceInteractor中的方法如下所示:

 fun reserveBadCaseDevice(workerId: Int, condition: DeviceCondition, result: (Unit) -> Unit, errorText: (String) -> Unit, errorId: (Int) -> Unit) { val data = ReservedWorkerData( DeviceState.TAKE, condition, null, workerId) val call = apiService.postAsyncReserveDevice(data, prefManager.getPrefToken()) call.enqueue(object : Callback<Void> { override fun onResponse(call: Call<Void>?, response: Response<Void>?) { response?.let { if (response.isSuccessful) { result.invoke(Unit) } else { errorText(apiErrorUtil.parse(response).message) } } } override fun onFailure(call: Call<Void>?, t: Throwable?) { errorId(apiErrorUtil.parse(t).message) } }) } 

事实证明,解决方案非常简单。 感谢一个良好的社区,你真的帮助!

 doAnswer{ println("invoke") val args = it.getArguments() (args[2] as (Unit) -> Unit).invoke(Unit) }.whenever(deviceInteractor).reserveBadCaseDevice( eq(workerId), eq(DeviceCondition.LOST), any(), any(), any())