2017-07-25 16 views
1

私は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())

答えて

0

である必要があります。問題は、第1のパラメータと第2のパラメータの正規表現を使用していることです。すべての引数に対してマッチャを使用してみてください。

しかし、私がここで感じている大きな問題は、サードパーティのライブラリをモックしようとしていることです。これは避けるべきものです。これはあなたの問題も解決します。ここにいくつかの余分な読んだことがあります - enter link description here

+0

そうです、私は第三者図書館を嘲笑するのは避けるべきだと思います。 –

関連する問題