5

ドキュメントでは、モック Web サービスを使用して WSClient に基づいて API クライアントをテストすること、つまり、play.server.Server実際の HTTP 要求に応答する を作成することを提案しています。

実際の TCP 接続を使用せずに、ファイルから直接オブジェクトを作成WSResponseし、ステータス ライン、ヘッダー ライン、本文を完備することをお勧めします。これにより、必要な依存関係が少なくなり、実行が高速になります。また、これが役立つ場合は他にもあるかもしれません。

しかし、私はそれを行う簡単な方法を見つけることができません。ラップされたすべての実装WSResponseは、ネットワークからの読み取りに関連付けられているようです。

このために WSResponse の独自のサブクラスを作成する必要がありますか、それとも間違っていて既に存在している可能性がありますか?

4

3 に答える 3

3

と を使用している場合play-framework 2.8.xscala以下のコードはダミーの生成に役立ちますWSResponse

import play.api.libs.ws.ahc.AhcWSResponse
import play.api.libs.ws.ahc.cache.CacheableHttpResponseStatus
import play.shaded.ahc.org.asynchttpclient.Response
import play.shaded.ahc.org.asynchttpclient.uri.Uri
import play.api.libs.ws.ahc.cache.CacheableHttpResponseBodyPart
import play.shaded.ahc.io.netty.handler.codec.http.DefaultHttpHeaders

class OutputWriterSpec extends FlatSpec with Matchers {
  val respBuilder = new Response.ResponseBuilder()
  respBuilder.accumulate(new CacheableHttpResponseStatus(Uri.create("http://localhost:9000/api/service"), 202, "status text", "json"))
  respBuilder.accumulate(new DefaultHttpHeaders().add("Content-Type", "application/json"))
  respBuilder.accumulate(new CacheableHttpResponseBodyPart("{\n\"id\":\"job-1\",\n\"lines\": [\n\"62812ce276aa9819a2e272f94124d5a1\",\n\"13ea8b769685089ba2bed4a665a61fde\"\n]\n}".getBytes(), true))
  val resp = new AhcWSResponse(respBuilder.build())

  val outputWriter = OutputWriter

  val expected = ("\"job-1\"", List("\"62812ce276aa9819a2e272f94124d5a1\"", "\"13ea8b769685089ba2bed4a665a61fde\""), "_SUCCESS")
  "Output Writer" should "handle response from api call" in {
    val actual = outputWriter.handleResponse(resp, "job-1")
    println("the actual : " + actual)
    actual shouldEqual(expected)

  }
}
于 2020-06-27T19:52:03.183 に答える