Menu
CoddyTech

Pruebas Unitarias (NUnit/xUnit)

Parte de la sección Programación Orientada a Objetos del Journey de C# de Coddy. Lección 67 de 70.

challenge icon

Desafío

Fácil

¡Completemos tu proyecto Library System añadiendo pruebas unitarias! Las pruebas son esenciales para garantizar que tu código funcione correctamente y siga funcionando cuando hagas cambios. Crearás un archivo de pruebas dedicado que verifique la funcionalidad principal de tu sistema de biblioteca.

Seguirás trabajando con la estructura de proyecto existente y añadirás un nuevo archivo de pruebas:

  • Book.cs: Conserva tu clase Book con Id, Title, Author, IsAvailable y los métodos Borrow() y Return().
  • User.cs: Conserva tu clase User con el seguimiento de préstamos, la constante MaxBooks, CanBorrow() y los métodos para gestionar los libros prestados.
  • Library.cs: Conserva tu clase Library con la lógica de préstamos, los métodos de búsqueda y los métodos GetAllBooks() y GetAllUsers().
  • LibraryTests.cs: ¡Este es tu nuevo archivo de pruebas! Crea una clase de pruebas que verifique que tu sistema de biblioteca funcione correctamente. Escribirás métodos de prueba que comprueben varios escenarios e indiquen si cada prueba se supera o no.
  • Program.cs: El punto de entrada que ejecuta las pruebas y muestra los resultados.

Tu clase de pruebas debe incluir métodos que prueben estos escenarios:

  • TestBookBorrow - Verifica que tomar prestado un libro disponible se complete correctamente y cambie su disponibilidad
  • TestBookBorrowUnavailable - Verifica que intentar tomar prestado un libro que ya está prestado falle de forma adecuada
  • TestUserBorrowingLimit - Verifica que los usuarios no puedan tomar prestados más de 3 libros
  • TestBookReturn - Verifica que devolver un libro prestado funcione correctamente
  • TestSearchByAuthor - Verifica que buscar por autor devuelva los libros correctos

Cada método de prueba debe devolver un valor booleano que indique si la prueba se superó. Crea un ejecutor de pruebas sencillo que ejecute todas las pruebas e imprima los resultados.

Recibirás las siguientes entradas:

  • Número de escenarios de prueba que se ejecutarán (1-5, correspondientes a las pruebas enumeradas anteriormente)

Para cada prueba ejecutada, imprime el resultado con este formato:

{TestName}: {PASS|FAIL}

Cuando se completen todas las pruebas, imprime un resumen:

--- Test Summary ---
Passed: {count}
Failed: {count}
Total: {count}

Por ejemplo, si la entrada es:

3

La salida debería ser:

TestBookBorrow: PASS
TestBookBorrowUnavailable: PASS
TestUserBorrowingLimit: PASS
--- Test Summary ---
Passed: 3
Failed: 0
Total: 3

Otro ejemplo con las 5 pruebas:

5

La salida debería ser:

TestBookBorrow: PASS
TestBookBorrowUnavailable: PASS
TestUserBorrowingLimit: PASS
TestBookReturn: PASS
TestSearchByAuthor: PASS
--- Test Summary ---
Passed: 5
Failed: 0
Total: 5

Tus pruebas deben crear instancias nuevas de Book, User y Library para cada prueba, a fin de garantizar el aislamiento. De este modo, el estado de una prueba no afecta a otra. ¡Piensa en cada prueba como una verificación independiente de un comportamiento específico de tu sistema!

Pruébalo tú mismo

using System;

namespace LibrarySystem
{
    class Program
    {
        public static void Main(string[] args)
        {
            // Lee el número de pruebas que se van a ejecutar
            int numTests = Convert.ToInt32(Console.ReadLine());

            // TODO: Crea un objeto LibraryTests y ejecuta las primeras numTests pruebas
        }
    }
}

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de C# online