如何从 HTTP 请求返回模拟响应对象?

问题描述

我是 Java 编程的新手,我想在以下代码段上编写单元测试:

Response response = request.get();
if (response.getStatusInfo().getFamily().equals(Response.Status.Family.SUCCESSFUL)) {
     return response.readEntity(type);
}

我可以使用以下代码创建 HTTP 请求返回有效响应的场景:

stubFor(get("someUrl").willReturn(aResponse().withStatus(200)));

我想创建另一个场景,其中方法调用 response.readEntity(type) 引发异常。为此,我要求 request.get() 方法返回一个模拟对象,以便我可以在模拟对象上定义所需的行为。 我阅读了 http://wiremock.org/docs 提供的文档以了解如何执行此行为,但没有找到任何方法将模拟对象作为 HTTP 响应返回。

此外,未注入 request 变量,因此我无法直接模拟它。

解决方法

你不能做这样的事情

stubFor(get("/$metadata?annotations=true").willReturn(aResponse().withStatus(200).withBody(Mock()));。这是因为 wiremock 仅充当 http 服务器模拟。您唯一可以配置的是响应(例如在 JSON 中)。 您可以做的是从wiremock返回例如400和错误代码正文,并检查您的代码是否接受此消息并对其进行正确操作。