Scalamock と Scalatest を使用して Play アプリケーションの単体テストを作成しています。
私の元のコードは次のようになります。
// Here ws is an injected WSClient
val req = Json.toJson(someRequestObject)
val resp: Future[WSResponse] = ws.url(remoteURL).post(Json.toJson(req))
一部では、scalamock を使用して実行しようとしている Web サービスへの外部呼び出しをモックする必要があります。
ws = stub[WSClient]
wsReq = stub[WSRequest]
wsResp = stub[WSResponse]
ws.url _ when(*) returns wsReq
wsReq.withRequestTimeout _ when(*) returns wsReq
(wsReq.post (_: java.io.File)).when(*) returns Future(wsResp)
ファイルを使用して投稿リクエストをモックすることはできますが、JSON を使用して投稿リクエストをモックすることはできません。
次のように、スタブ関数参照を個別に配置してみました。
val f: StubFunction1[java.io.File, Future[WSResponse]] = wsReq.post (_: java.io.File)
val j: StubFunction1[JsValue, Future[WSResponse]] = wsReq.post(_: JsValue)
2 行目のコンパイル エラーが発生します。Unable to resolve overloaded method post
ここで何が欠けていますか?1 つのオーバーロードされたメソッドをモックできないのに、もう 1 つのメソッドをモックできないのはなぜですか?