Kotlin 如何使用高阶函数参数测试方法?
我试着用一个高阶函数作为参数来测试一个方法。 面对这个错误:Kotlin 如何使用高阶函数参数测试方法?,kotlin,mockito,tdd,Kotlin,Mockito,Tdd,我试着用一个高阶函数作为参数来测试一个方法。 面对这个错误: Argument(s) are different! Wanted: viewContractMock.showError( (fetchUserIdentity_showOptions_failed$2) Function0<kotlin.Unit> ); -> at br.com.fastshop.ecommerce.ui.resetpassword.controller.RecoveryOptionsC
Argument(s) are different! Wanted:
viewContractMock.showError(
(fetchUserIdentity_showOptions_failed$2) Function0<kotlin.Unit>
);
-> at br.com.fastshop.ecommerce.ui.resetpassword.controller.RecoveryOptionsControllerTest.fetchUserIdentity_showOptions_failed(RecoveryOptionsControllerTest.kt:65)
Actual invocation has different arguments:
viewContractMock.showError(
() Function0<kotlin.Unit>
);
-> at br.com.fastshop.ecommerce.ui.resetpassword.controller.RecoveryOptionsController$observeLive$2.onChanged(RecoveryOptionsController.kt:29)
这里是从应用程序调用我的方法的地方:
recoveryOptionsUseCase.userIdentityLive.observe({ lifecycle }) {
when (it.status) {
ResourceState.LOADING -> {
if (it.loading) {
viewContract.showLoading()
} else {
viewContract.hideLoading()
}
}
ResourceState.SUCCESS -> {
viewContract.bindOptions()
}
ResourceState.ERROR -> viewContract.showError(it.callback!!)
}
}
你的问题是什么?@takendarkk我不知道如何传递
(fetchUserIdentity\u showOptions\u failed$2)Function0
作为一个匹配程序查看你的代码你必须传递你放在里面的内容it.callback
我使用mockito kotlin的argumentCaptors修复它
recoveryOptionsUseCase.userIdentityLive.observe({ lifecycle }) {
when (it.status) {
ResourceState.LOADING -> {
if (it.loading) {
viewContract.showLoading()
} else {
viewContract.hideLoading()
}
}
ResourceState.SUCCESS -> {
viewContract.bindOptions()
}
ResourceState.ERROR -> viewContract.showError(it.callback!!)
}
}