Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Haga lo que hicimos en aula

@WebMvcTest(MedicoController.class)
@AutoConfigureJsonTesters
@WithMockUser
class MedicoControllerTest {

@Autowired
private MockMvc mockMvc;

@MockBean
private MedicoRepository repository;

@Autowired
private JacksonTester<DatosRegistroMedico> registroJson;

@Autowired
private JacksonTester<DatosDetalleMedico> detalleJson;

@Test
void registrar_medico_sin_body_retorna_400() throws Exception {
mockMvc.perform(post("/medicos"))
.andExpect(status().isBadRequest());
}

@Test
void registrar_medico_con_body_valido_retorna_201_y_json() throws Exception {

DatosDireccion direccion = datosDireccion();

MedicoJPA medico = new MedicoJPA(
        null,
        true,
        "Médico01",
        "medico01@mail.com",
        "3008882121",
        "1897000",
        Especialidad.CARDIOLOGIA,
        new DireccionJPA(direccion)
);

when(repository.save(any())).thenReturn(medico);

var requestBody = registroJson.write(
        new DatosRegistroMedico(
                "Médico01",
                "medico01@mail.com",
                "3008882121",
                "1897000",
                Especialidad.CARDIOLOGIA,
                direccion
        )
).getJson();

var response = mockMvc.perform(post("/medicos")
                .contentType(MediaType.APPLICATION_JSON)
                .content(requestBody))
        .andExpect(status().isCreated())
        .andReturn()
        .getResponse();

var jsonEsperado = detalleJson.write(new DatosDetalleMedico(medico)).getJson();

assertThat(response.getContentAsString()).isEqualTo(jsonEsperado);

}

1 respuesta

Hola Alexis, espero que estés bien

¡Gracias por compartir tu código! Parece que estás en el camino correcto al crear pruebas automatizadas para el método registrar de la clase MedicoController. Aquí tienes algunos puntos que podrías considerar para asegurarte de que estás siguiendo el procedimiento de la clase:

  1. Configuración del entorno de prueba: Ya has configurado el entorno de prueba con @WebMvcTest y @MockBean, lo cual es excelente. Esto te permite probar el controlador de manera aislada.

  2. Pruebas para diferentes escenarios: Ya tienes dos pruebas, una para verificar que un registro sin cuerpo devuelve un estado 400 (Bad Request) y otra para un registro válido que devuelve un estado 201 (Created) junto con el JSON esperado. Esto es una buena práctica, ya que cubres diferentes escenarios.

  3. Uso de JacksonTester: Estás utilizando JacksonTester para manejar la conversión de objetos a JSON, lo cual es muy útil para mantener tus pruebas limpias y legibles.

  4. Simulación del repositorio: Al utilizar when(repository.save(any())).thenReturn(medico);, estás simulando el comportamiento del repositorio, lo cual es esencial para las pruebas unitarias.

Si todo esto coincide con lo que se hizo en el aula, parece que estás siguiendo los pasos correctamente. Asegúrate de que los nombres de los métodos de prueba y los datos utilizados sean consistentes con los del ejercicio de clase.

Espero que esto te ayude a avanzar. ¡Bons estudios!