Menu
Coddy logo textTech

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

¡Vamos a completar tu proyecto del Sistema de Biblioteca agregando pruebas unitarias! Las pruebas son esenciales para asegurar que tu código funcione correctamente y continúe funcionando a medida que realizas cambios. Crearás un archivo de prueba dedicado que verifique la funcionalidad principal de tu sistema de biblioteca.

Continuarás trabajando con la estructura de tu proyecto existente, agregando un nuevo archivo de prueba:

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

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

  • TestBookBorrow - Verificar que tomar prestado un libro disponible sea exitoso y cambie su disponibilidad
  • TestBookBorrowUnavailable - Verificar que intentar tomar prestado un libro ya prestado falle apropiadamente
  • TestUserBorrowingLimit - Verificar que los usuarios no puedan tomar prestados más de 3 libros
  • TestBookReturn - Verificar que devolver un libro prestado funcione correctamente
  • TestSearchByAuthor - Verificar que la búsqueda por autor devuelva los libros correctos

Cada método de prueba debe devolver un booleano indicando si la prueba pasó. Crea un ejecutor de pruebas simple que ejecute todas las pruebas e imprima los resultados.

Recibirás las siguientes entradas:

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

Para cada prueba que se ejecute, imprime el resultado en el formato:

{TestName}: {PASS|FAIL}

Después de que todas las pruebas se completen, 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 para asegurar el aislamiento. De esta manera, el estado de una prueba no afecta a otra. ¡Piensa en cada prueba como una verificación autónoma de un comportamiento específico en tu sistema!

Pruébalo tú mismo

using System;
using Library.Tests;

class Program
{
    public static void Main(string[] args)
    {
        // TODO: Crear una instancia de BorrowingServiceTests
        
        // TODO: Ejecutar cada método de prueba, imprimiendo el nombre de la prueba antes de cada resultado
        // Ejemplo:
        // Console.WriteLine("BorrowBook_WhenBookAvailable_ReturnsTrue");
        // tests.BorrowBook_WhenBookAvailable_ReturnsTrue();
        
    }
}

Todas las lecciones de Programación Orientada a Objetos