You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unit测试报错Missing mocked calls:MockK协程coEvery使用问题排查

解决MockKException: Missing mocked calls inside every { ... } block错误

问题原因

你遇到的错误是因为在mockk的初始化lambda块中错误使用coEvery配置普通属性的返回值。coEvery仅用于挂起函数的模拟,而ApolloResponse的data是普通属性(非挂起的getter方法),应该用every来配置。

修正方案

将mockResponse初始化块中的coEvery替换为every即可解决问题。同时需明确MockK的规则:普通方法/属性用every,挂起函数用coEvery。

修正后的完整代码

@Test
fun testGetRocketsEmitsOnNullData() = runTest {
    val mockData = mockk<RocketsQuery.Data> {
        every { rockets } returns emptyList()
    }
    val mockResponse = mockk<ApolloResponse<RocketsQuery.Data>> {
        every { data } returns mockData // 替换coEvery为every
    }
    val apolloClient = mockk<ApolloClient>()
    val repo = RocketsRepositoryImpl(apolloClient)
    coEvery { apolloClient.query(any<RocketsQuery>()).execute() } returns mockResponse // execute是挂起函数,用coEvery正确
    val result = repo.getRockets().first()
    assertTrue(result.items.isEmpty())
}

额外说明

  • 若需模拟挂起函数,不要在mockk的初始化lambda内使用coEvery,应在初始化块外单独配置。示例:
    val mockResponse = mockk<ApolloResponse<RocketsQuery.Data>>()
    coEvery { mockResponse.someSuspendFunction() } returns someValue
    

内容的提问来源于stack exchange,提问作者Equlo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 18:22:36