Kon*_*lin 5 java testing playframework ws-client playframework-2.0
文档建议使用模拟 Web 服务测试基于 WSClient 的 API 客户端,即创建一个play.server.Server将响应真实 HTTP 请求的客户端。
我更喜欢WSResponse直接从文件创建对象,包括状态行、标题行和正文,没有真正的 TCP 连接。这将需要更少的依赖并运行得更快。也可能有其他情况,这很有用。
但我找不到一个简单的方法来做到这一点。似乎所有包装的实现WSResponse都与从网络读取有关。
我应该为此创建自己的 WSResponse 子类,还是我错了并且它已经存在?
Play 的 API 似乎是故意钝化的。您必须使用它们的“Cacheable”类,这些类是唯一可以从您周围的对象中直接实例化的类。
这应该让你开始:
import play.api.libs.ws.ahc.AhcWSResponse;
import play.api.libs.ws.ahc.cache.CacheableHttpResponseBodyPart;
import play.api.libs.ws.ahc.cache.CacheableHttpResponseHeaders;
import play.api.libs.ws.ahc.cache.CacheableHttpResponseStatus;
import play.shaded.ahc.io.netty.handler.codec.http.DefaultHttpHeaders;
import play.shaded.ahc.org.asynchttpclient.Response;
import play.shaded.ahc.org.asynchttpclient.uri.Uri;
AhcWSResponse response = new AhcWSResponse(new Response.ResponseBuilder()
.accumulate(new CacheableHttpResponseStatus(Uri.create("uri"), 200, "status text", "protocols!"))
.accumulate(new CacheableHttpResponseHeaders(false, new DefaultHttpHeaders().add("My-Header", "value")))
.accumulate(new CacheableHttpResponseBodyPart("my body".getBytes(), true))
.build());
Run Code Online (Sandbox Code Playgroud)
神秘的布尔值没有记录。我的猜测是 BodyPart 的布尔值是否是身体的最后一部分。我对 Headers 的猜测是 headers 是否在消息的尾部。