10.6 Agregando pruebas para las Categorías

En nuestro proyecto xUnit.CaducaRest vamos a crear una nueva clase llamada CategoriasTests esta clase tendrá todas las pruebas unitarias para la tabla Categorias. Vamos a probar la regla para validar que no se pueda crear una categoría con el mismo nombre.

Como comentarios indicamos que ya conocemos que existe una categoría con el nombre Analgésicos ya que este fue creado en la base de datos en memoria.

Como nombre le ponemos el nombre de la regla que vamos a probar, en el caso de la categoría la clase se llama AgregarNombreRegla, luego indicamos el caso a probar, en este caso NombreRepetido y al final agregamos el valor esperado, en este caso sería Falso, de esta forma indicamos que en la tabla Categoría hay una regla que debe regresar falso si el nombre ya existe.

En el constructor de la clase inicializamos la base de datos en memoria y el objeto locService.

Mandamos llamar a la función ValidarRegla de nuestra clase AgregarNombreRegla y el valor esperado debería ser falso, con Assert.False comprobamos que el valor regresado por la función sea False.

public class CategoriaTests
{
    CaducaContext contexto;
    LocService locService;
    public CategoriaTests()
    {
        contexto = new CaducaContextMemoria().ObtenerContexto();
        locService = new MockLocService().ObtenerLocService();
    }
    
    /// <summary>
    /// Validamos que no se pueda agregar una categoria con un nombre repetido
    /// El resultado debería ser falso
    /// </summary>
    [Fact]
    public async Task ReglaNombreUnico_ConNombreRepetido_RegresaFalsoAsync()
    {
        //Inicialización de datos (Arrange)
        var categoriaDAO = new CategoriaDAO(contexto, locService);
        //Obtenemos la lista de categorías si esta vacía agregamos una
        List<Categoria> categorias = await categoriaDAO.ObtenerTodoAsync();
        if (categorias.Count==0)
        {
            categorias.Add(new Categoria 
                        { Clave = 1, Nombre = "Analgésicos" });
        }
        //Método a probar (Act)
        ReglaNombreUnico agregarNombreRegla = new 
            ReglaNombreUnico(categorias[0].Id, 
                             categorias[0].Nombre, 
                             contexto, 
                             locService);
        //Comprobación de resultados (Assert)
        Assert.False(agregarNombreRegla.EsCorrecto());
    }   
}

Por lo general en las pruebas unitarias se prueban todos los posibles casos, en nuestro caso la regla debe regresar true si el nombre no existe

/// <summary>
/// Validamos que no se pueda agregar una categoria con un nombre repetido
/// El resultado debería ser true
/// </summary>
[Fact]
public async Task ReglaNombreUnico_ConNombreNoRepetido_RegresaVerdaderoAsync()
{
    //Inicialización de datos (Arrange)
    var categoriaDAO = new CategoriaDAO(contexto, locService);
    //Obtenemos la lista de categorías si esta vacía agregamos una
    List<Categoria> categorias = await categoriaDAO.ObtenerTodoAsync();
    if (categorias.Count == 0)
    {
        categorias.Add(new Categoria { Clave = 1, Nombre = "Análgesicos" });
    }
    //Método a probar (Act)
    ReglaNombreUnico agregarNombreRegla = new ReglaNombreUnico
                        (2,"Antibióticos", contexto, locService);
    //Comprobación de resultados (Assert)
    Assert.True(agregarNombreRegla.EsCorrecto());
}

De esta forma nos aseguramos que futuros cambios a nuestro código no vayan a provocar nuevos errores.

Las funciones de la base de datos como agregar, borrar, modificar se deben probar como pruebas de integración

Last updated