简单使用Mockito AnyMap不起作用

时间:2017-05-03 01:17:49

标签: scala mockito scalatest

为什么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无法通过此签名识别

1 个答案:

答案 0 :(得分:1)

声明;我没有使用ScalaTest,但由于Mockito功能似乎按原样提供,您应该可以使用Matchers类中的任何内容。

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

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

但是还有更多问题 - 为什么你spy()拥有你拥有的对象?当接受 Map并返回{func1时,您为什么要在Map的模拟行为中返回 Int {1}}?

这可以编译并适用于我:

import org.mockito.{Matchers, Mockito}

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

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

...