私はFinatra HttpClientに次の関数のテストを書こうとしています。MockitoとScalaを使用した一般的なメソッドを模倣する
def executeJson[T: Manifest](
request: Request,
expectedStatus: Status = Status.Ok): Future[T] = {...}
別の質問によると、StackOverflowで答えました。 mocking generic scala method in mockito。 、残念ながら、それは私の問題を解決していなかった
verify(httpClientMock, times(1)).executeJson[JiraProject]
(argThat(new RequestMatcher(req)))(Matchers.any())
def executeJson[T](
request: Request,
expectedStatus: Status = Status.Ok)
(implicit T: Manifest[T]): Futuren[T] = {...}
は、だから私が試した:これは、の省略形です。私はまだ次のエラーがあります。
Invalid use of argument matchers!
0 matchers expected, 1 recorded:
-> at org.specs.mock.MockitoStubs$class.argThat(Mockito.scala:331)
This exception may occur if matchers are combined with raw values:
//incorrect:
someMethod(anyObject(), "raw String");
When using matchers, all arguments have to be provided by matchers.
For example:
//correct:
someMethod(anyObject(), eq("String by matcher"));
私もそれがvalue Manifest of type scala.reflect.ManifestFactory.type does not take type parameters
を文句を言い、Matchers.eq(Manifest[JiraProject])
を試してみました。
私はScalaとMockitoを使い慣れていますが、何か間違ったことがあるのですか、誤解されていますか?
ありがとうございました!
問題が見つかりました。 executeJsonは実際には3つのparams-request、expectedStatus、Manifestをとります。しかし、expectedStatusはオプションであるため、明示的に渡していないため、不平を言っています。したがって、最終的なコードはverify(httpClientMock, times(1)).executeJson[JiraProject](argThat(new RequestMatcher(req)), Matchers.any[Status])(Matchers.any())
そうです、私は第三者図書館を嘲笑するのは避けるべきだと思います。 –