1

scalatest と mockito のヘルプが必要です。ジェネリックを使用した単純なメソッドのテストを書きたい:

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

テストを実行すると、次の例外がスローされます。

Invalid use of argument matchers!
4 matchers expected, 3 recorded:

では、メソッドのパラメーターが 3 つしかないのに、なぜ 4 つのマッチャーを要求するのでしょうか? ジェネリックのせい?

バージョン:

  • スカラ 2.11.7
  • スケーラテスト 2.2.4
  • モキート 1.10.19
4

1 に答える 1

2

これは、次の表記のためです。

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]])
于 2015-08-06T06:31:04.043 に答える