web-dev-qa-db-ja.com

MockRestServiceServer:本体でPOST呼び出しをモックする方法は?

私は次のようにMockRestServiceServerを使用してPOSTメソッドをモック化しようとしています:

MockRestServiceServer server = bindTo(restTemplate).build();
server.expect(requestTo("/my-api"))
        .andExpect(method(POST))
        .andRespond(withSuccess(expectedResponce, APPLICATION_JSON));

問題:この設定でリクエストの本文を確認するにはどうすればよいですか?

私は ドキュメント といくつかの例を閲覧しましたが、それがどのように実行できるのかまだわかりません。

6
Sasha Shpota

HttpMessageConverterを使用すると役立つ場合があります。 document によると、HttpMessageConverter :: readメソッドは、入力機能をチェックする場所になります。

0
user3089483

どのように私はそのような種類のテストを行うでしょう。私はモック化されたサーバーでString形式で受信される適切な本文を期待し、この本文が受信された場合、サーバーはString形式で適切な応答本文で応答します。応答本文を受け取ったら、それをPOJOにマップし、すべてのフィールドをチェックします。また、送信する前にStringからPOJOにリクエストをマップします。これで、マッピングが両方向で機能することを確認でき、リクエストを送信してレスポンスを解析できます。コードは次のようになります。

  @Test
  public void test() throws Exception{
    RestTemplate restTemplate = new RestTemplate();
    URL testRequestFileUrl = this.getClass().getClassLoader().getResource("post_request.json");
    URL testResponseFileUrl = this.getClass().getClassLoader().getResource("post_response.json");
    byte[] requestJson = Files.readAllBytes(Paths.get(Objects.requireNonNull(testRequestFileUrl).toURI()));
    byte[] responseJson = Files.readAllBytes(Paths.get(Objects.requireNonNull(testResponseFileUrl).toURI()));
    MockRestServiceServer server = bindTo(restTemplate).build();
    server.expect(requestTo("http://localhost/my-api"))
          .andExpect(method(POST))
          .andExpect(content().json(new String(requestJson, "UTF-8")))
          .andRespond(withSuccess(responseJson, APPLICATION_JSON));

    UriComponentsBuilder uriBuilder = UriComponentsBuilder.fromHttpUrl("http://localhost/my-api");

    ObjectMapper objectMapper = new ObjectMapper();
    EntityOfTheRequest body = objectMapper.readValue(requestJson, EntityOfTheRequest.class);

    RequestEntity.BodyBuilder bodyBuilder = RequestEntity.method(HttpMethod.POST, uriBuilder.build().toUri());
    bodyBuilder.accept(MediaType.APPLICATION_JSON);
    bodyBuilder.contentType(MediaType.APPLICATION_JSON);
    RequestEntity<EntityOfTheRequest> requestEntity = bodyBuilder.body(body);

    ResponseEntity<EntityOfTheResponse> responseEntity = restTemplate.exchange(requestEntity, new ParameterizedTypeReference<EntityOfTheResponse>() {});
    assertThat(responseEntity.getBody().getProperty1(), is(""));
    assertThat(responseEntity.getBody().getProperty2(), is(""));
    assertThat(responseEntity.getBody().getProperty3(), is(""));
  }
0