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

[Sugerencia] Sobre Test

Mi ejercicio, sin dar una fecha especifica.

package med.voll.api.domain.consulta.validaciones;

import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;

import java.time.LocalDateTime;

import jakarta.validation.ValidationException;
import med.voll.api.domain.consulta.dto.DatosAgendarConsulta;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;


class HorarioDeFuncionamientoClinicaTest {

    private HorarioDeFuncionamientoClinica validador;
    private DatosAgendarConsulta datos;

    @BeforeEach
    void setup() {
        validador = new HorarioDeFuncionamientoClinica();
        datos = mock(DatosAgendarConsulta.class); // Mockeamos el DTO de entrada
    }

    @Test
    @DisplayName("Debería permitir agendar consulta en horario válido")
    void validarEscenarioExitoso() {
        // Lunes a las 10:00
        var proximoLunes = LocalDateTime.now().with(java.time.temporal.TemporalAdjusters.next(java.time.DayOfWeek.MONDAY)).withHour(10);
        when(datos.fecha()).thenReturn(proximoLunes);

        assertDoesNotThrow(() -> validador.validar(datos));
    }

    @Test
    @DisplayName("Debería lanzar excepción si es domingo")
    void validarEscenarioDomingo() {
        // Un domingo cualquiera
        var proximoDomingo = LocalDateTime.now().with(java.time.temporal.TemporalAdjusters.next(java.time.DayOfWeek.SUNDAY));
        when(datos.fecha()).thenReturn(proximoDomingo);

        var exception = assertThrows(ValidationException.class, () -> validador.validar(datos));
        assertEquals("El horario de atención de la clínica es de lunes a sábado, de 07:00 a 19:00 horas", exception.getMessage());
    }

    @Test
    @DisplayName("Debería lanzar excepción antes de las 7:00 AM")
    void validarEscenarioAntesApertura() {
        var lunesMuyTemprano = LocalDateTime.now().with(java.time.temporal.TemporalAdjusters.next(java.time.DayOfWeek.MONDAY)).withHour(6);
        when(datos.fecha()).thenReturn(lunesMuyTemprano);

        assertThrows(ValidationException.class, () -> validador.validar(datos));
    }

    @Test
    @DisplayName("Debería lanzar excepción después de las 7:00 PM")
    void validarEscenarioDespuesCierre() {
        var lunesMuyTarde = LocalDateTime.now().with(java.time.temporal.TemporalAdjusters.next(java.time.DayOfWeek.MONDAY)).withHour(20);
        when(datos.fecha()).thenReturn(lunesMuyTarde);

        assertThrows(ValidationException.class, () -> validador.validar(datos));
    }
}
1 respuesta

¡Hola Christian, espero que estés bien!

Gracias por compartir tu código y tu duda. Parece que estás trabajando en la creación de pruebas automatizadas para validar el horario de funcionamiento de una clínica. El código que compartiste ya tiene una buena cobertura de pruebas para diferentes escenarios, como validar consultas en días y horarios no permitidos.

Si estás buscando sugerencias para mejorar o expandir tus pruebas, aquí tienes algunas ideas:

  1. Pruebas de Borde: Asegúrate de probar los límites exactos del horario de funcionamiento. Por ejemplo, verifica si una consulta exactamente a las 7:00 AM y otra a las 7:00 PM son aceptadas correctamente.

  2. Pruebas de Días Festivos: Si la clínica no opera en ciertos días festivos, podrías añadir pruebas para esos días específicos.

  3. Pruebas de Cambio de Horario: Si la clínica tiene horarios especiales en ciertos días (por ejemplo, horario reducido en vísperas de feriados), considera agregar pruebas para esos casos.

  4. Pruebas de Zona Horaria: Si tu aplicación podría ser utilizada en diferentes zonas horarias, asegúrate de que las pruebas consideren este factor.

  5. Pruebas de Escenarios Adicionales: Aunque ya tienes pruebas para los casos más comunes, considera si hay otros escenarios específicos de negocio que deban ser cubiertos.

Recuerda que las pruebas automatizadas son una excelente manera de garantizar que tu aplicación funcione correctamente a medida que evoluciona. Espero que estas sugerencias te ayuden a mejorar tus pruebas y a cubrir más casos de uso.

¡Espero haber ayudado y buenos estudios!