kotlin - 如何测试具有高阶函数参数的方法?
问题描述
我正在尝试以高阶函数作为参数来测试方法。并面临这个错误:
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)
显然,当我调用该showError
方法时,我没有传递正确的参数
这是我的有趣测试:
@Test
fun fetchUserIdentity_showOptions_failed() {
//Arrange
`when`(guestIdentityDataSourceMock.userInfo()).thenReturn(Completable.error { RuntimeException("") })
//Act
SUT.onStart()
//Assert
verify(viewContractMock).showLoading()
verify(viewContractMock).hideLoading()
verify(viewContractMock).showError { fetchUserIdentity_showOptions_failed() }
}
这是从应用程序调用我的方法的地方:
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!!)
}
}
解决方案
推荐阅读
- python - 如何在python中检查程序的运行时间
- tabs - Puppeteer 关闭新标签
- php - 在 PDF Laravel 中获取错误未定义偏移量 -1
- django - 带有 Case 的 Django QuerySet 注释似乎是误报
- javascript - 在我检查之前无法获取网站的元素名称
- javascript - 防止2个连续数字正则表达式
- python - Jupyter Notebook:文件路径或缓冲区对象类型无效:
Python - react-native - 反应原生选择多个项目,如画廊
- python - 从 Python 中的 SOAP 响应中提取 XML 数据
- sql - sybase 中带有 getdate() 的 IF 条件