Menu
Coddy logo textTech

Unit Testing (NUnit/xUnit)

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

challenge icon

Aufgabe

Einfach

Lassen Sie uns Ihr Bibliothekssystem-Projekt abschließen, indem wir Unit-Tests hinzufügen! Testen ist unerlässlich, um sicherzustellen, dass Ihr Code korrekt funktioniert und auch bei Änderungen weiterhin funktioniert. Sie werden eine dedizierte Testdatei erstellen, die die Kernfunktionalität Ihres Bibliothekssystems überprüft.

Sie werden weiter mit Ihrer bestehenden Projektstruktur arbeiten und eine neue Testdatei hinzufügen:

  • Book.cs: Behalten Sie Ihre Book-Klasse mit Id, Title, Author, IsAvailable sowie den Methoden Borrow() und Return() bei.
  • User.cs: Behalten Sie Ihre User-Klasse mit der Ausleihverfolgung, der Konstante MaxBooks, CanBorrow() und den Methoden zur Verwaltung ausgeliehener Bücher bei.
  • Library.cs: Behalten Sie Ihre Library-Klasse mit der Ausleihlogik, den Suchmethoden und den Methoden GetAllBooks() und GetAllUsers() bei.
  • LibraryTests.cs: Dies ist Ihre neue Testdatei! Erstellen Sie eine Testklasse, die überprüft, ob Ihr Bibliothekssystem korrekt funktioniert. Sie werden Testmethoden schreiben, die verschiedene Szenarien prüfen und berichten, ob jeder Test bestanden wurde oder fehlgeschlagen ist.
  • Program.cs: Ihr Einstiegspunkt, der die Tests ausführt und die Ergebnisse anzeigt.

Ihre Testklasse sollte Methoden enthalten, die diese Szenarien testen:

  • TestBookBorrow - Überprüfen Sie, ob das Ausleihen eines verfügbaren Buches erfolgreich ist und dessen Verfügbarkeit ändert
  • TestBookBorrowUnavailable - Überprüfen Sie, ob das Ausleihen eines bereits ausgeliehenen Buches angemessen fehlschlägt
  • TestUserBorrowingLimit - Überprüfen Sie, ob Benutzer nicht mehr als 3 Bücher ausleihen können
  • TestBookReturn - Überprüfen Sie, ob das Zurückgeben eines ausgeliehenen Buches korrekt funktioniert
  • TestSearchByAuthor - Überprüfen Sie, ob die Suche nach Autor die korrekten Bücher zurückgibt

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

Sie erhalten die folgenden Eingaben:

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

Geben Sie für jeden ausgeführten Test das Ergebnis im folgenden Format aus:

{TestName}: {PASS|FAIL}

Geben Sie nach Abschluss aller Tests eine Zusammenfassung aus:

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

Wenn die Eingabe zum Beispiel wie folgt lautet:

3

Sollte die Ausgabe wie folgt aussehen:

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 wie folgt aussehen:

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

Ihre Tests sollten für jeden Test neue Instanzen von Book, User und Library erstellen, um eine Isolierung zu gewährleisten. Auf diese Weise beeinflusst der Zustand eines Tests nicht den eines anderen. Betrachten Sie jeden Test als eine in sich geschlossene Überprüfung eines bestimmten Verhaltens in Ihrem 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