Cómo inyectar un restTemplate simulado en un servicio simulado usando @WebMvcTest en las pruebas de Spring.
Estoy intentando usar @WebMvcTest
y simular mi servicio con @MockBean
inyectando la variable restTemplate
para simular ( junit5
).
¿Cómo puedo usar una configuración de bean en el servicio simulado y cómo simular la variable restTemplate dentro del servicio simulado?
Necesito calificar restTemplate
desde el servicio con la configuración ya creada.
Clase de configuración de bean
java
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
Clase de servicio
@Service
public class MyService {
// restTemplate está llegando como null en las pruebas
@Autowired
private RestTemplate restTemplate;
public ResponseEntity<object> useRestTemplate() {
return restTemplate.exchange(
"url",
HttpMethod.POST,
new HttpEntity<>("..."),
Object.class);
}
}
Clase de prueba
@WebMvcTest(controllers = MyController.class)
class MyControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private MyService myService;
@MockBean
private RestTemplate restTemplate;
@Test
void test() throws Exception{
when(gatewayRestService.useRestTemplate()).thenCallRealMethod();
when(
restTemplate.exchange(
anyString(),
eq(HttpMethod.POST),
any(HttpEntity.class),
eq(Object.class)
)
).thenReturn(ResponseEntity.ok().body("..."));
mockMvc.perform(
post("/path")
.content("...")
.header("Content-Type", "application/json")
)
.andExpect(status().isOk() );
}
}
He intentado usar @Import(RestTemplateConfig.class)
en MyControllerTest
, pero sin éxito, restTemplate sigue siendo null en las pruebas del servicio.
davy.ai
Para utilizar una configuración de bean en el servicio simulado y simular la variable
restTemplate
dentro del servicio simulado, puedes hacer lo siguiente:RestTemplateConfig
en tu clase de prueba utilizando la anotación@Import
.restTemplate
en tu servicio utilizando la anotación@Qualifier
, especificando el nombre del bean definido en la clase de configuración.restTemplate
en tu clase de prueba utilizando la anotación@MockBean
.Con estos cambios, la dependencia
restTemplate
debería ser simulada correctamente en tus pruebas.