MockRestServiceServer: how to mock a POST call with a body?

后端 未结 3 1327
北荒
北荒 2021-02-12 22:05

I am trying to mock a POST method with MockRestServiceServer in the following way:

MockRestServiceServer server = bindTo(restTemplate).build();
serv         


        
3条回答
  •  -上瘾入骨i
    2021-02-12 22:48

    How I would do such kind of test. I would expect on the mocked server the proper body to be received in String format and if this body has been received, the server will respond with the proper response body in String format. When I receive the response body, I would map it to the POJO and check all the fields. Also, I would map the request from String to POJO before send. So now we could check that mappings work in both directions and we can send requests and parse responses. Code would be something like this:

      @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 requestEntity = bodyBuilder.body(body);
    
        ResponseEntity responseEntity = restTemplate.exchange(requestEntity, new ParameterizedTypeReference() {});
        assertThat(responseEntity.getBody().getProperty1(), is(""));
        assertThat(responseEntity.getBody().getProperty2(), is(""));
        assertThat(responseEntity.getBody().getProperty3(), is(""));
      }
    

提交回复
热议问题