es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Simular la devolución nula de RestTemplate

Necesito simular restTemplate para una solicitud simple:

HttpEntity<requestvo> request = new HttpEntity<>(new RequestVO(), new HttpHeaders());
restTemplate.postForEntity("URL", request, ResponseVO.class);

Pero obtengo null en la solicitud postForEntity:

ResponseVO respVO = new ResponseVO();
respVO.setEntry("https://www.test.com");
ResponseEntity<object> resp = new ResponseEntity<>(
    respVO,
    HttpStatus.OK
);      
when(restTemplate.postForEntity(any(), any(), any())).thenReturn(resp);

Intenté seguir una solución similar, consultando aquí, estoy simulando objetos relevantes:

@Mock
HttpHeaders httpHeaders;
@Mock
ResponseEntity responseEntity;
@Mock   
private RestTemplate restTemplate;

EDICIÓN: Se obtienen los mismos resultados nulos cuando se intentan soluciones similares a las sugeridas por @JoãoDias:

java
when(restTemplate.postForEntity(anyString(), any(HttpEntity.class), eq(ResponseVO.class))).thenReturn(resp);

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para simular RestTemplate para una solicitud simple, puedes usar el siguiente fragmento de código:

    // crear una simulación de RestTemplate
    RestTemplate restTemplateMock = Mockito.mock(RestTemplate.class);
    
    // crear una simulación de HttpHeaders
    HttpHeaders headersMock = Mockito.mock(HttpHeaders.class);
    
    // crear una simulación de HttpEntity
    HttpEntity<requestvo> requestMock = new HttpEntity<>(new RequestVO(), headersMock);
    
    // crear una simulación de ResponseEntity
    ResponseEntity<responsevo> responseMock = Mockito.mock(ResponseEntity.class);
    
    // establecer el valor de respuesta
    ResponseVO responseVO = new ResponseVO();
    responseVO.setEntry("https://www.test.com");
    responseMock = new ResponseEntity<>(responseVO, HttpStatus.OK);
    
    // simular el método postForEntity
    Mockito.when(restTemplateMock.postForEntity(Mockito.anyString(), Mockito.any(HttpEntity.class), Mockito.eq(ResponseVO.class)))
           .thenReturn(responseMock);
    
    // llamar al método a probar
    ResponseEntity<responsevo> responseEntity = restTemplateMock.postForEntity("URL", requestMock, ResponseVO.class);
    
    // aserciones
    Assert.assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
    Assert.assertEquals("https://www.test.com", responseEntity.getBody().getEntry());
    

    En este código:

    • Primero creamos una simulación de RestTemplate y HttpHeaders.
    • Luego creamos una simulación de HttpEntity utilizando la simulación de HttpHeaders y un objeto RequestVO.
    • Creamos una simulación de ResponseEntity y establecemos su valor para ser devuelto por el método restTemplate.postForEntity().
    • Finalmente, simulamos el método postForEntity() utilizando las simulaciones creadas anteriormente y con los parámetros esperados.

    Este código debería simular correctamente el restTemplate y devolver la respuesta simulada siempre que se llame al método postForEntity().

Comments are closed.