Unit-Tests (NUnit/xUnit)
Teil des Abschnitts Objektorientierte Programmierung der C#-Journey von Coddy. Lektion 67 von 70.
Aufgabe
EinfachVervollstä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 mitId,Title,Author,IsAvailablesowie den MethodenBorrow()undReturn().User.cs: Behalte deine User-Klasse mit der Erfassung ausgeliehener Bücher, der KonstanteMaxBooks,CanBorrow()und Methoden zur Verwaltung ausgeliehener Bücher.Library.cs: Behalte deine Library-Klasse mit der Ausleihlogik, Suchmethoden sowie den MethodenGetAllBooks()undGetAllUsers().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:
3Sollte die Ausgabe lauten:
TestBookBorrow: PASS
TestBookBorrowUnavailable: PASS
TestUserBorrowingLimit: PASS
--- Test Summary ---
Passed: 3
Failed: 0
Total: 3Ein weiteres Beispiel mit allen 5 Tests:
5Sollte die Ausgabe lauten:
TestBookBorrow: PASS
TestBookBorrowUnavailable: PASS
TestUserBorrowingLimit: PASS
TestBookReturn: PASS
TestSearchByAuthor: PASS
--- Test Summary ---
Passed: 5
Failed: 0
Total: 5Deine 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
1Grundlagen der OOP
Externe DateienNamespaces & DirektivenEinführung in Klassen & ObjekteDas 'this'-SchlüsselwortMethoden und ParameterFelder vs. EigenschaftenKonstruktorenObjektinitialisiererWiederholung – Einfacher Taschenrechner4Vererbung
Grundlegende Vererbungs-(:)-SyntaxDas „base“-Schlüsselwort„virtual“- und „override“-SchlüsselwörterVersiegelte KlassenDie „object“-BasisklasseWiederholung – Mitarbeiterhierarchie7Erweiterte Funktionen
Überladen von OperatorenIndexer (this[])ToString()-ÜberschreibungErweiterungsmethodenRückblick – Benutzerdefinierte Liste10Entwurfsmuster Teil 1
Einführung in EntwurfsmusterThread-sicheres SingletonFactory-MusterObserver-Muster (Events)Strategy-Muster13Abschließende Herausforderungen
E-Learning-PlattformKomponente für SpielfigurenFahrzeugvermietungsdienst2Eigenschaften & statische Member
Automatisch implementierte EigenschaftenNur lesbare/schreibbare EigenschaftenStatische Felder & MethodenStatische KlassenMember mit Ausdruckskörpern5Polymorphie & Interfaces
Compile- vs. Laufzeit-PolymorphieInterface vs. abstrakte KlasseMehrere InterfacesExplizite InterfacesUpcasting & DowncastingWiederholung – Formenrechner3Klassenarchitektur
Instanz- vs. statische DatenSchlüsselwörter 'readonly' & 'const'Backing FieldsRückblick – Bankkontenverwaltung6Kapselung
ZugriffsmodifikatorenEigenschaften zur KapselungImplementierung der DatenkapselungMuster für UnveränderlichkeitRückblick – Schülerdaten9Variable Argumente
Das Schlüsselwort 'params'Optionale ParameterBenannte ArgumenteMethodenüberladung12Projekt: Bibliothekssystem
ProjektstrukturBuch- und BenutzermodelleLogik des AusleihsystemsLINQ für die SucheKonsolen-UI / AdministrationsoberflächeUnit-Tests (NUnit/xUnit)Übe selbstständig: Online-C#-Compiler