Scalatest搭配Mockito使用时spy功能未按预期运行问题咨询
问题诱因
- Mockito的spy实例仅能捕获发生在自身的方法调用,原业务对象的所有调用行为都不会被spy记录
- 你的测试代码中实际执行
findModules方法的是原f.moduleService实例,内部触发的moduleQueries也属于原实例的方法调用,你创建的serviceSpy全程没有收到任何请求,因此会抛出零交互的报错。你调试时观测到的调用属于原对象的行为,和spy实例无关。
修复方案
将调用findModules的主体从原f.moduleService替换为已创建的serviceSpy即可。spy默认会将所有请求转发给原对象,不会影响原有业务逻辑的执行,同时会完整记录内部的方法调用,修正后的代码如下:
"Find all modules" in { f => for { _ <- f.moduleService.persist(....) _ <- f.moduleService.persist(....) _ <- f.moduleService.persist(....) serviceSpy = spy(f.moduleService) // 调用方替换为spy实例 result <- serviceSpy.findModules( someArguments, None, Some(false) ) } yield { verify(serviceSpy, times(1)).moduleQueries(None, Some(false)) result.size shouldBe 3 } }
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

