2

Mockito を使用して Web サービスのモックを作成しようとしています。モックは、play WS ライブラリを使用して POST リクエストをシミュレートする必要があります。

/**
 * Mock for the  Web Service
 */
case class WSMock() extends Mockito {
  val wsRequestHolder: play.api.libs.ws.WS.WSRequestHolder = mock[play.api.libs.ws.WS.WSRequestHolder]

  val wsResponse: play.api.libs.ws.Response = mock[play.api.libs.ws.Response]
  wsResponse.status returns 200
  wsResponse.body returns "BODY RESP FROM WS"

  val futureResponse = scala.concurrent.Future { wsResponse }

  wsRequestHolder.post(any[Map[String,Seq[String]]]) returns futureResponse
}

テストを実行すると、次のエラーが発生します。

[error]     InvalidUseOfMatchersException: 
[error] Invalid use of argument matchers!
[error] 3 matchers expected, 1 recorded:
[error] -> at org.specs2.mock.mockito.MockitoMatchers$class.any(MockitoMatchers.scala:24)
[error] 
[error] This exception may occur if matchers are combined with raw values:
[error]     //incorrect:
[error]     someMethod(anyObject(), "raw String");
[error] When using matchers, all arguments have to be provided by matchers.
[error] For example:
[error]     //correct:
[error]     someMethod(anyObject(), eq("String by matcher"));
[error] 
[error] For more info see javadoc for Matchers class.

複雑な型 (ネストされた型パラメーターを持つ) を使用する any[...] 式がマッチャーに正しく解決されないように見えます。ただし、生の型がどこに作用するのかわかりません。パラメータにそのようなマッチャーを指定する適切な方法は何Map[String,Seq[String]]ですか?

どうもありがとう!

4

2 に答える 2

2
wsRequestHolder.post(any[Map[String,Seq[String]]]) returns futureResponse

post実際にはいくつかの追加の暗黙的なパラメーターがあることに注意してください。

def post [T] (body: T)(implicit wrt: Writeable[T], ct: ContentTypeOf[T]):
    Promise[Response]

...この spec2-users thread のように、おそらく明示的に一致させる必要があります。

于 2013-10-07T18:31:44.340 に答える