当使用带有mockito的scalatest时,scalatest引发奇怪的异常

时间:2015-08-06 06:24:06

标签: scala mockito scalatest scala-generics

我需要有关scalatest和mockito的帮助。我想用一个简单的泛型方法编写测试:

overflow:hidden

我的考试班:

trait RestClient {
  def put[T: Marshaller](url: String, data: T, query: Option[Map[String, String]] = None) : Future[HttpResponse]
}

当我运行测试时,它抛出以下异常:

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")))
      ... 
    }
  }
}

那么,为什么它询问4个匹配器,如果我的方法只有3个参数?是因为通用吗?

版本:

  • scala 2.11.7
  • scalatest 2.2.4
  • mockito 1.10.19

1 个答案:

答案 0 :(得分:2)

这是因为以下符号

def put[T: Marshaller](a: A, b: B, c: C)

相当于

def put[T](a: A, b: B, c: C)(implicit m: Marshaller[T])

所以你需要为marshaller传递一个匹配器:

put(anyA, anyB, anyC)(any[Marshaller[T]])