使用MockK测试遇Type mismatch:Runs与Awaits类型不匹配
解决MockK中
just Runs类型不匹配问题 问题原因
你遇到的差异源于两个被Mock函数的类型不同:
noticeRepository.delete(any())是非挂起的Unit函数,MockK的every { ... } just Runs刚好适配这个场景的扩展函数;accountService.findAccount(...)是挂起函数(带suspend修饰),此时用普通的every会触发类型不匹配——MockK针对挂起函数的Mock需要专门的coEvery,对应的just扩展也是适配挂起场景的。
解决方案
将针对挂起函数的Mock语句中的every替换为coEvery即可:
coEvery { accountService.findAccount(nonExistAccountId.toString()) } just Runs
补充说明
MockK的just函数有两个核心版本:
- 配合
every使用,用于非挂起函数的Mock,接受Runs类型; - 配合
coEvery使用,用于挂起函数的Mock,处理挂起上下文的返回逻辑。
你之前用everyMock挂起函数时,编译器找不到对应的just扩展,因此抛出“Runs和Awaits类型不匹配”的错误。
内容的提问来源于stack exchange,提问作者iknow kim
相关产品推荐
相关产品推荐

