MockK同一测试中是否支持使用不同exactly参数多次调用verify()?
MockK多verify调用问题解答
MockK原生支持同一测试用例中使用不同exactly参数多次调用verify(),不需要额外特殊配置。你遇到的报错并非是第二个verify的参数应用到了第一个代码块,通常由以下两类原因导致:
- 代码书写笔误:你贴出的第二个
verify块校验的是b.addThing(thing),但报错信息明确指向Observer.onThingChanged()方法,说明实际运行的测试代码和你贴出的示例不一致,大概率是第二个verify块内误写了observer.onThingChanged()的校验逻辑,才会触发次数不匹配的错误,可先核对实际运行的测试代码。 - Mock状态未重置:如果你在同一个测试类的多个测试用例中复用了
observer、b这类mock实例,且没有在每个用例执行前清空调用记录,之前测试产生的调用会累加到当前用例中,也会触发该校验错误。你可以在测试类的@Before钩子中添加clearMocks(observer, b),每次执行测试前重置mock状态即可。
调试建议
如果需要确认所有mock调用都被覆盖,可以在所有verify语句结束后添加confirmVerified(observer, b),该方法会校验传入的mock对象不存在未被验证的调用,方便排查多余调用或者漏测问题。
内容的提问来源于stack exchange,提问作者David Wasser
相关产品推荐
相关产品推荐

