简单使用 Mockito AnyMap 不起作用

Simple use of Mockito AnyMap is not working

为什么 anyMap 在这个简单的例子中不起作用?我得到 func1 无法与此签名匹配?

case class foo() {def func1 (m: Map[Int, Int]) = m.size }

case class SomeTest extends SomeSpec MockitoSugar with MustMatchers {
   it("checks size ") { fixture =>
      val spyfoo = spy(foo())
      doReturn(5).when(spyfoo).func1(anyMap())}

我知道 func1 不能用这个签名识别

免责声明;我不使用 ScalaTest,但 Mockito 功能似乎按原样提供,您应该能够使用 Matchers class.

中的任何内容

但是 提供的 anyMap()anyMapOf[K,V] 函数是 java.util.Map 的匹配器,因此不会匹配您的 func1方法签名(除非你明确引入 java.util.Map)期望 scala.collection.immutable.Map[Int,Int].

解决此问题的最简单方法似乎是使用通用 any[T] 匹配器,它非常松散,但可以满足您的需要。

不过还有更多问题 - 为什么要 spy() 使用您拥有的对象?你为什么要 returnfunc1 的模拟行为中 Map 当它 需要 一个 Map 和 return 一个 Int?

这编译并适用于我:

import org.mockito.{Matchers, Mockito}

val mockFoo = Mockito.mock(classOf[Foo])

Mockito.when(mockFoo.func1(Matchers.any(classOf[Map[Int, Int]]))).thenReturn(1)

...