将 scalatest 与 mockito 一起使用时,scalatest 抛出奇怪的异常
When using scalatest with mockito, scalatest throws strange exception
我需要有关 scalatest 和 mockito 的帮助。我想用通用的简单方法编写测试:
trait RestClient {
def put[T: Marshaller](url: String, data: T, query: Option[Map[String, String]] = None) : Future[HttpResponse]
}
我的测试class:
class MySpec extends ... with MockitoSugar .... {
...
val restClient = mock[RestClient]
...
"Some class" must {
"handle exception and print it" in {
when(restClient.put(anyString(), argThat(new SomeMatcher()), any[Option[Map[String, String]])).thenReturn(Future.failed(new Exception("Some exception")))
...
}
}
}
当我 运行 测试时,它抛出以下异常:
Invalid use of argument matchers!
4 matchers expected, 3 recorded:
那么,如果我的方法只有 3 个参数,为什么它会询问 4 个匹配器?是不是因为泛型?
版本:
- scala 2.11.7
- scalatest 2.2.4
- 模拟 1.10.19
这是因为下面的符号
def put[T: Marshaller](a: A, b: B, c: C)
相当于
def put[T](a: A, b: B, c: C)(implicit m: Marshaller[T])
因此您需要为编组器传递一个匹配器:
put(anyA, anyB, anyC)(any[Marshaller[T]])
我需要有关 scalatest 和 mockito 的帮助。我想用通用的简单方法编写测试:
trait RestClient {
def put[T: Marshaller](url: String, data: T, query: Option[Map[String, String]] = None) : Future[HttpResponse]
}
我的测试class:
class MySpec extends ... with MockitoSugar .... {
...
val restClient = mock[RestClient]
...
"Some class" must {
"handle exception and print it" in {
when(restClient.put(anyString(), argThat(new SomeMatcher()), any[Option[Map[String, String]])).thenReturn(Future.failed(new Exception("Some exception")))
...
}
}
}
当我 运行 测试时,它抛出以下异常:
Invalid use of argument matchers!
4 matchers expected, 3 recorded:
那么,如果我的方法只有 3 个参数,为什么它会询问 4 个匹配器?是不是因为泛型?
版本:
- scala 2.11.7
- scalatest 2.2.4
- 模拟 1.10.19
这是因为下面的符号
def put[T: Marshaller](a: A, b: B, c: C)
相当于
def put[T](a: A, b: B, c: C)(implicit m: Marshaller[T])
因此您需要为编组器传递一个匹配器:
put(anyA, anyB, anyC)(any[Marshaller[T]])