web-dev-qa-db-fra.com

MockRestServiceServer: comment se moquer d'un POST appel avec un corps?

J'essaie de me moquer d'une méthode POST avec MockRestServiceServer de la manière suivante:

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

Problème: Comment puis-je vérifier un corps de demande dans cette configuration?

J'ai parcouru la documentation et quelques exemples et je n'arrive toujours pas à comprendre comment cela peut être fait.

6
Sasha Shpota

Peut utiliser HttpMessageConverter peut vous aider. selon la méthode document , HttpMessageConverter :: read peut être l'endroit qui permet de vérifier la capacité d'entrée.

0
user3089483

Comment je ferais ce genre de test. Je m'attendrais à ce que sur le serveur simulé le corps approprié soit reçu au format String et si ce corps a été reçu, le serveur répondra avec le corps de réponse approprié au format String. Lorsque je recevrais le corps de la réponse, je le mapperais au POJO et vérifierais tous les champs. De plus, je mapperais la demande de String à POJO avant de l'envoyer. Nous pouvons donc maintenant vérifier que les mappages fonctionnent dans les deux sens et nous pouvons envoyer des demandes et analyser les réponses. Le code serait quelque chose comme ceci:

  @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
Igor Khvostenkov