MockK中如何获取Mock对象上方法的实际调用次数?
MockK 查询Mock对象方法调用次数/调用记录的实现
MockK 原生支持直接获取Mock对象的调用记录、统计方法调用次数,并非只能通过verify()做存在性/次数校验,对应MockitomockingDetails(mock).getInvocations()的能力实现方式如下:
获取Mock对象全量调用记录
所有通过mockk()、spyk()创建的Mock/间谍对象,以及通过mockkObject()代理的对象,都内置_allRecordedCalls属性,直接访问即可拿到该对象所有方法调用的完整记录,每条记录包含方法签名、入参、调用时序等元数据。
基础用法示例:// 示例Mock对象 val userServiceMock = mockk<UserService>(relaxed = true) // 触发若干次调用 userServiceMock.getUserById(1) userServiceMock.getUserById(2) userServiceMock.updateUser(3) // 拿到该Mock的所有调用记录 val allInvocations = userServiceMock._allRecordedCalls统计指定方法的调用次数
拿到全量调用记录后,直接通过条件筛选即可统计对应方法的调用次数,支持按方法名、入参等维度过滤:// 统计getUserById方法的总调用次数 val getUserTotalCount = allInvocations.count { it.method.name == "getUserById" } // 统计getUserById方法入参为1的调用次数 val getUserWithId1Count = allInvocations.count { it.method.name == "getUserById" && it.args.first() == 1 }辅助操作
如果需要清空历史调用记录重新统计,调用clearMocks(你的Mock对象, answers = false, recordedCalls = true)即可,不会清除已经配置的Mock回答规则。
内容的提问来源于stack exchange,提问作者k314159
相关产品推荐
相关产品推荐

