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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 21:06:07