Menu
Coddy logo textTech

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 entscheidend, um sicherzustellen, dass dein Code korrekt funktioniert und auch bei Änderungen weiterhin funktioniert. Du wirst eine eigene Testdatei erstellen, die die Kernfunktionalität deines Bibliothekssystems überprüft.

Du arbeitest weiterhin mit deiner bestehenden Projektstruktur 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 Nachverfolgung 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 wirst Testmethoden schreiben, 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, dass das Ausleihen eines verfügbaren Buches erfolgreich ist und seine Verfügbarkeit ändert
  • TestBookBorrowUnavailable - Überprüfe, dass das Ausleihen eines bereits ausgeliehenen Buches ordnungsgemäß fehlschlägt
  • TestUserBorrowingLimit - Überprüfe, dass Benutzer nicht mehr als 3 Bücher ausleihen können
  • TestBookReturn - Überprüfe, dass die Rückgabe eines ausgeliehenen Buches korrekt funktioniert
  • TestSearchByAuthor - Überprüfe, dass die Suche nach einem 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 die folgenden 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

Die Ausgabe sollte folgendermaßen aussehen:

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

Ein weiteres Beispiel mit allen 5 Tests:

5

Die Ausgabe sollte folgendermaßen aussehen:

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 Isolation sicherzustellen. Auf diese Weise beeinflusst der Zustand eines Tests keinen anderen. Betrachte jeden Test als eine eigenständige Überprüfung eines bestimmten Verhaltens in deinem System!

Probier es selbst

using System;
using Library.Tests;

class Program
{
    public static void Main(string[] args)
    {
        // TODO: Erstelle eine Instanz von BorrowingServiceTests
        
        // TODO: Führe jede Testmethode aus, drucke den Testnamen vor jedem Ergebnis
        // Beispiel:
        // Console.WriteLine("BorrowBook_WhenBookAvailable_ReturnsTrue");
        // tests.BorrowBook_WhenBookAvailable_ReturnsTrue();
        
    }
}

Alle Lektionen in Objektorientierte Programmierung

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