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

Scala 3中带using参数的方法Mock问题求助

解决Scala上下文参数(using子句)与Mockito匹配器的冲突问题

你的问题核心是Scala 3的**上下文参数(using子句)**和Mockito匹配器的语法适配问题,两种写法的错误原因和解决方法如下:

错误原因解析

  • 第一种写法when(myClass.foo(any[Int]())).thenReturn(IO.unit):
    编译器允许这种写法是因为上下文参数可隐式推导,但Mockito运行时会识别到方法有两个参数列表,要求为每个参数列表提供匹配器,因此报错“2 matchers expected, 1 recorded”。
  • 第二种写法when(myClass.foo(any[Int]())(any[String]())).thenReturn(IO.unit):
    不符合Scala 3语法规则——第二个参数列表是using修饰的上下文参数,必须用using关键字显式标记,否则编译器会认为方法不接受该参数列表结构,抛出“method foo in class MyClass does not take more parameters”错误。

正确解决方案

在Stub方法时,使用using关键字显式传递第二个参数列表的匹配器,语法如下:

when(myClass.foo(any[Int]())(using any[String]())).thenReturn(IO.unit)

这样既符合Scala 3上下文参数的语法要求,又为Mockito提供了两个参数列表对应的匹配器,编译和运行都能正常通过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 19:45:55