Menu
CoddyTech

Testy jednostkowe (NUnit/xUnit)

Część sekcji Programowanie obiektowe ścieżki C# w Coddy. Lekcja 67 z 70.

challenge icon

Wyzwanie

Łatwy

Dokończmy projekt systemu bibliotecznego, dodając testy jednostkowe! Testowanie jest niezbędne, aby upewnić się, że kod działa poprawnie i nadal działa po wprowadzaniu zmian. Utworzysz osobny plik testowy, który sprawdzi podstawowe funkcje systemu bibliotecznego.

Kontynuuj pracę z istniejącą strukturą projektu, dodając nowy plik testowy:

  • Book.cs: Zachowaj klasę Book z właściwościami Id, Title, Author, IsAvailable oraz metodami Borrow() i Return().
  • User.cs: Zachowaj klasę User ze śledzeniem wypożyczeń, stałą MaxBooks, metodą CanBorrow() oraz metodami do zarządzania wypożyczonymi książkami.
  • Library.cs: Zachowaj klasę Library z logiką wypożyczania, metodami wyszukiwania oraz metodami GetAllBooks() i GetAllUsers().
  • LibraryTests.cs: To Twój nowy plik testowy! Utwórz klasę testową, która sprawdzi, czy system biblioteczny działa poprawnie. Napiszesz metody testowe sprawdzające różne scenariusze i informujące, czy każdy test zakończył się powodzeniem, czy niepowodzeniem.
  • Program.cs: Punkt wejścia, który uruchamia testy i wyświetla wyniki.

Twoja klasa testowa powinna zawierać metody sprawdzające następujące scenariusze:

  • TestBookBorrow — sprawdź, czy wypożyczenie dostępnej książki się powiedzie i zmieni jej dostępność
  • TestBookBorrowUnavailable — sprawdź, czy próba wypożyczenia już wypożyczonej książki kończy się odpowiednim niepowodzeniem
  • TestUserBorrowingLimit — sprawdź, czy użytkownicy nie mogą wypożyczyć więcej niż 3 książek
  • TestBookReturn — sprawdź, czy zwrot wypożyczonej książki działa poprawnie
  • TestSearchByAuthor — sprawdź, czy wyszukiwanie według autora zwraca właściwe książki

Każda metoda testowa powinna zwracać wartość logiczną informującą, czy test zakończył się powodzeniem. Utwórz prosty moduł uruchamiający testy, który wykona wszystkie testy i wyświetli wyniki.

Otrzymasz następujące dane wejściowe:

  • Liczba scenariuszy testowych do uruchomienia (1-5, odpowiadająca testom wymienionym powyżej)

Dla każdego uruchomionego testu wyświetl wynik w formacie:

{TestName}: {PASS|FAIL}

Po zakończeniu wszystkich testów wyświetl podsumowanie:

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

Na przykład, jeśli dane wejściowe to:

3

Wynik powinien być następujący:

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

Kolejny przykład, obejmujący wszystkie 5 testów:

5

Wynik powinien być następujący:

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

Każdy test powinien tworzyć nowe instancje klas Book, User i Library, aby zapewnić izolację. Dzięki temu stan jednego testu nie wpłynie na inny. Potraktuj każdy test jako samodzielną weryfikację określonego działania systemu!

Spróbuj swoich sił

using System;

namespace LibrarySystem
{
    class Program
    {
        public static void Main(string[] args)
        {
            // Odczytaj liczbę testów do uruchomienia
            int numTests = Convert.ToInt32(Console.ReadLine());

            // TODO: Utwórz obiekt LibraryTests i uruchom pierwsze numTests testów
        }
    }
}

Wszystkie lekcje w sekcji Programowanie obiektowe

Poćwicz samodzielnie: Kompilator C# online