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