【问题标题】:Mockito argument matchers InvalidUseOfMatchersException for Scala ProjectScala 项目的 Mockito 参数匹配器 InvalidUseOfMatchersException
【发布时间】:2019-11-14 16:42:01
【问题描述】:

我有这个 Scala 项目,我正在使用 mockito (mockito-core 3.0) 进行测试

这是我要模拟的函数的函数签名

def hset[V: ByteStringSerializer](key: String, field: String, value: V): Future[Boolean] = ...

这不起作用

verify(mockObj, never()).hset(anyString(), anyString(), anyLong())

错误输出

Invalid use of argument matchers!
4 matchers expected, 3 recorded:

当函数有 3 个泛型参数时,不确定为什么它需要 4 个匹配器

这行得通

verify(mockObj, never()).hset("a", "b", 3.0)

这是因为我使用的 scala 代码无法与 mockito 核心正确运行吗?

【问题讨论】:

    标签: scala mockito


    【解决方案1】:

    问题原因是context bound

    def hset[V: ByteStringSerializer](key: String, field: String, value: V): Future[Boolean]
    

    其实是

    def hset[V](key: String, field: String, value: V)(implicit ev: ByteStringSerializer[V]): Future[Boolean]
    

    现在你可以看到为什么有 4 个参数了,试试

    verify(mockObj, never()).hset(anyString(), anyString(), anyLong())(any(classOf[ByteStringSerializer[Long]]))
    

    【讨论】:

    • 谢谢。我只是认为这是常规泛型。
    【解决方案2】:

    正如 Ivan 指出的那样,您缺少隐式匹配器。 我建议您迁移到 mockito-scala,因为当隐式在范围内时,这种场景将开箱即用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-10
      • 2015-02-02
      • 2022-01-23
      • 2012-09-23
      • 1970-01-01
      相关资源
      最近更新 更多