首页 > 解决方案 > 使用wiremock时返回自定义异常

问题描述

我需要在模拟像这样的 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)));
      }

标签: javajava-8mockitowiremock

解决方案


您不能返回异常。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


推荐阅读