【问题标题】:Return Custom Exception while using wiremock使用wiremock时返回自定义异常
【发布时间】:2021-06-05 06:08:42
【问题描述】:

我需要在模拟 url 时返回自定义异常

每当我点击 /test/user/get/ 时,我都需要返回 UserNotFoundException。

我正在尝试这样做。有人可以帮我如何在wiremock中返回异常

 public void setupWiresMockStubs(String body, int status) {
        wireMockServer.stubFor(post(urlEqualTo(
            "/test/user/get"))
            .willReturn(aResponse().withHeader("Content-Type", "application/json")
                .withBody(body)
                .withStatus(status)));
      }

【问题讨论】:

  • 您能否详细说明返回此异常的含义? WireMock 用作 HTTP/S 模拟服务器,因此 WireMock 本身不应该抛出任何“异常” - 它应该提供具有各种状态代码的响应(您的应用程序可能会将其解释为异常或错误)。我还假设你真正的 API 不会抛出异常——那会设计得非常糟糕。相反,您的应用可能会抛出异常基于 API 响应

标签: java java-8 mockito wiremock


【解决方案1】:

您不能返回异常。 API 应返回状态代码和正文。

假设您的 API 在异常 UserNotFoundException 的情况下返回 BadRequest(http 代码 400):

@PostMapping(value = "/test/user/get")
public String myApi(@RequestParam String param1) {
    try {...
        } catch(UserNotFoundException e) {
    throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "user not found");

您可以这样模拟上述 API:

WireMock.stubFor(WireMock.post(WireMock.urlPathEqualTo("/test/user/get"))
            .willReturn(aResponse().withStatus(400).withBody("user not found")));

甚至更好 - 在 Wiremock 中有预定义的错误 (ResponseDefinitionBuilder):

WireMock.stubFor(WireMock.post(WireMock.urlPathEqualTo("/test/user/get"))
            .willReturn(badRequest().withBody("user not found")));

您在 Wiremock 中有各种预定义的错误:

badRequest(), unauthorized(), notFound() etc.

https://github.com/wiremock/wiremock/blob/master/src/main/java/com/github/tomakehurst/wiremock/client/WireMock.java#L602

【讨论】:

  • 完美运行!
猜你喜欢
  • 2017-03-11
  • 1970-01-01
  • 1970-01-01
  • 2017-07-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-19
  • 1970-01-01
  • 2012-03-22
相关资源
最近更新 更多