Menu
CoddyTech

Unit-Tests (NUnit/xUnit)

Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy. Lektion 67 von 70.

challenge icon

Aufgabe

Einfach

Vervollständige dein Library-System-Projekt, indem du Unit-Tests hinzufügst! Tests sind wichtig, um sicherzustellen, dass dein Code korrekt funktioniert und auch nach Änderungen weiterhin funktioniert. Du erstellst eine eigene Testdatei, die die Kernfunktionen deines Bibliothekssystems überprüft.

Du arbeitest mit deiner bestehenden Projektstruktur weiter und fügst eine neue Testdatei hinzu:

  • Book.cs: Behalte deine Book-Klasse mit Id, Title, Author, IsAvailable sowie den Methoden Borrow() und Return().
  • User.cs: Behalte deine User-Klasse mit der Erfassung ausgeliehener Bücher, der Konstante MaxBooks, CanBorrow() und Methoden zur Verwaltung ausgeliehener Bücher.
  • Library.cs: Behalte deine Library-Klasse mit der Ausleihlogik, Suchmethoden sowie den Methoden GetAllBooks() und GetAllUsers().
  • LibraryTests.cs: Das ist deine neue Testdatei! Erstelle eine Testklasse, die überprüft, ob dein Bibliothekssystem korrekt funktioniert. Du schreibst Testmethoden, die verschiedene Szenarien prüfen und angeben, ob jeder Test bestanden wurde oder fehlgeschlagen ist.
  • Program.cs: Dein Einstiegspunkt, der die Tests ausführt und die Ergebnisse anzeigt.

Deine Testklasse sollte Methoden enthalten, die diese Szenarien testen:

  • TestBookBorrow – Überprüfe, ob das Ausleihen eines verfügbaren Buchs erfolgreich ist und dessen Verfügbarkeit ändert.
  • TestBookBorrowUnavailable – Überprüfe, ob das Ausleihen eines bereits ausgeliehenen Buchs wie erwartet fehlschlägt.
  • TestUserBorrowingLimit – Überprüfe, ob Benutzer nicht mehr als 3 Bücher ausleihen können.
  • TestBookReturn – Überprüfe, ob die Rückgabe eines ausgeliehenen Buchs korrekt funktioniert.
  • TestSearchByAuthor – Überprüfe, ob die Suche nach Autor die richtigen Bücher zurückgibt.

Jede Testmethode sollte einen booleschen Wert zurückgeben, der angibt, ob der Test bestanden wurde. Erstelle einen einfachen Test-Runner, der alle Tests ausführt und die Ergebnisse ausgibt.

Du erhältst folgende Eingaben:

  • Anzahl der auszuführenden Testszenarien (1-5, entsprechend den oben aufgeführten Tests)

Gib für jeden ausgeführten Test das Ergebnis in folgendem Format aus:

{TestName}: {PASS|FAIL}

Gib nach Abschluss aller Tests eine Zusammenfassung aus:

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

Wenn die Eingabe beispielsweise lautet:

3

Sollte die Ausgabe lauten:

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

Ein weiteres Beispiel mit allen 5 Tests:

5

Sollte die Ausgabe lauten:

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

Deine Tests sollten für jeden Test neue Instanzen von Book, User und Library erstellen, um eine Isolierung sicherzustellen. So wirkt sich der Zustand eines Tests nicht auf einen anderen aus. Betrachte jeden Test als eigenständige Überprüfung eines bestimmten Verhaltens deines Systems!

Probier es selbst

using System;

namespace LibrarySystem
{
    class Program
    {
        public static void Main(string[] args)
        {
            // Lies die Anzahl der auszuführenden Tests ein
            int numTests = Convert.ToInt32(Console.ReadLine());

            // TODO: Erstelle ein LibraryTests-Objekt und führe die ersten numTests Tests aus
        }
    }
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-C#-Compiler