Soy nuevo en los conceptos de JUnit y Mockito y estoy tratando de descubrir cómo se hace en una llamada de plantilla de descanso.
Considere la siguiente implementación aproximada:
Class TheWrapper{
@Autowired
RestTemplate template;
}
Class Abc extends TheWrapper{
boolean validation(){
// .....
//carries out different validation operations
// .....
try{
ResponseEntity<Object> response= template.postForEntity("localhost:8080...",obj,Object.class);
if(response.getStatusCodeValue()==200) // Problem: throwing MyCustomException here,
// when test is runned
return true;
else
return false;
}catch(Exception e){
throws new MyCustomException(...);
}
}
Ahora necesito escribir pruebas unitarias de tal manera que tenga que burlarme de la llamada de la plantilla rest y
compruebe si el código de estado es 200 o no.
Class Testing{
@InjectMock
Abc obj;
@Mock
RestTemplate template;
@BeforeEach
void setup(){
obj=new Abc();
MockitoAnnotations.initMocks(this);
}
@Test
void testingIt(){
ResponseEntity<Object> response=new ResponseEntity<Object>(HttpStatus.OK);
when(template.postForEntity("local...",any(),any())).then(response)
Assertion.assertEquals(obj.validation(),true);
}
}
Si esta no es la forma de implementarlo, corríjame.
------------------------------------
La plantilla de descanso sobrecargó el método postForEntity varias veces. Asegúrate de definir el correcto. Además, puedes usar anyString() en lugar de 'local...'.
template.postForEntity(anyString(),any(),any())
------------------------------------
Puede utilizar un servicio independiente para mantener todas las respuestas simuladas. Wiremock es una de esas aplicaciones útiles que puedes utilizar. Puede tener todas las combinaciones posibles de solicitud/respuesta HTTP y también código de estado.
Usando wiremock también puedes crear archivos separados de mapeo de solicitud-respuesta, lo que puede ser útil para evitar la codificación.
http://wiremock.org/docs/getting-started/