Menu
Coddy logo textTech

Tests & Integration

Teil des Abschnitts Objektorientierte Programmierung der GO-Journey von Coddy. Lektion 104 von 107.

challenge icon

Aufgabe

Einfach

Bringen wir unser Library Management System zum Abschluss, indem wir Tests schreiben, die überprüfen, ob alles korrekt funktioniert! Du erstellst eine Testdatei, die die Kernfunktionalität deiner Bibliothek validiert: Sie stellt sicher, dass books ordnungsgemäß ausgeliehen und zurückgegeben werden können und dass Fehlerbedingungen korrekt behandelt werden.

Du organisierst deinen Code über fünf Dateien:

  • book.go: Deine Book-Struktur mit den Feldern ID, Title, Author, ISBN und Available. Füge den NewBook-Konstruktor hinzu, der books als verfügbar initialisiert.
  • user.go: Deine User-Struktur mit den Feldern ID, Name, Email und BorrowedBooks. Füge den NewUser-Konstruktor hinzu.
  • library.go: Deine Library-Struktur mit Maps für books und users sowie den Methoden NewLibrary, AddBook, AddUser, Borrow und Return. Die Methode Borrow sollte bei einem ungültigen user, einem ungültigen book oder einem nicht verfügbaren book Fehler zurückgeben. Die Methode Return sollte bei einem ungültigen user, einem ungültigen book oder einem nicht ausgeliehenen book Fehler zurückgeben.
  • library_test.go: Hier schreibst du deine Testfunktionen! Erstelle Tests, die Folgendes überprüfen:
    • TestBorrowSuccess: Überprüfe, dass das Ausleihen eines verfügbaren books erfolgreich ist (kein Fehler zurückgegeben wird), das book nicht verfügbar wird und die book-ID zur borrowing-Liste des users hinzugefügt wird
    • TestBorrowUnavailable: Überprüfe, dass das Ausleihen eines bereits ausgeliehenen books einen Fehler zurückgibt
    • TestBorrowInvalidUser: Überprüfe, dass das Ausleihen mit einer nicht existierenden user-ID einen Fehler zurückgibt
    • TestReturnSuccess: Überprüfe, dass die Rückgabe eines ausgeliehenen books erfolgreich ist, das book wieder verfügbar wird und die book-ID aus der borrowing-Liste des users entfernt wird

    Jeder Test sollte seine eigene Library mit den erforderlichen books und users einrichten, die Operation ausführen und die Ergebnisse mit t.Error oder t.Errorf überprüfen, wenn Assertions fehlschlagen.

  • main.go: Führe deine Tests manuell aus und gib die Ergebnisse aus. Lies den auszuführenden Testnamen ein (borrow_success, borrow_unavailable, borrow_invalid_user oder return_success). Richte abhängig vom Testnamen das passende Szenario ein und gib PASS aus, wenn alle Assertions erfolgreich sind, oder FAIL: [reason], wenn eine Assertion fehlschlägt.

Die folgende Eingabe wird bereitgestellt:

  • Ein Testname: borrow_success, borrow_unavailable, borrow_invalid_user oder return_success

Verwende für jeden Test diese standardmäßigen Testdaten:

  • Book: ID B001, Title Go Programming, Author John Doe, ISBN 123-456
  • User: ID U001, Name Alice, Email alice@test.com

Zum Beispiel bei:

borrow_success

Deine Ausgabe sollte sein:

PASS

Und bei:

borrow_unavailable

Deine Ausgabe sollte sein:

PASS

Und bei:

borrow_invalid_user

Deine Ausgabe sollte sein:

PASS

Und bei:

return_success

Deine Ausgabe sollte sein:

PASS

Für borrow_success: Erstelle eine Library, füge book und user hinzu, leihe das book aus, überprüfe, dass kein Fehler aufgetreten ist, überprüfe, dass das book nicht verfügbar ist, und überprüfe, dass der user das book in seiner borrowing-Liste hat.

Für borrow_unavailable: Erstelle eine Library, füge book und user hinzu, setze Available des books auf false, versuche, es auszuleihen, und überprüfe, dass ein Fehler zurückgegeben wird.

Für borrow_invalid_user: Erstelle eine Library, füge nur das book hinzu (keinen user), versuche, es mit der user-ID U001 auszuleihen, und überprüfe, dass ein Fehler zurückgegeben wird.

Für return_success: Erstelle eine Library, füge book und user hinzu, leihe das book zuerst aus, gib es anschließend zurück, überprüfe, dass kein Fehler aufgetreten ist, überprüfe, dass das book wieder verfügbar ist, und überprüfe, dass die borrowing-Liste des users leer ist.

Das Schreiben von Tests stellt sicher, dass sich dein Library-System korrekt verhält, und gibt dir die Zuversicht, Änderungen vorzunehmen, ohne bestehende Funktionalität zu beeinträchtigen!

Probier es selbst

package main

import (
	"bufio"
	"fmt"
	"os"
	"strings"
)

func main() {
	reader := bufio.NewReader(os.Stdin)
	testName, _ := reader.ReadString('\n')
	testName = strings.TrimSpace(testName)

	// Standard-Test-Fixtures
	// Buch: ID "B001", Titel "Go Programming", Autor "John Doe", ISBN "123-456"
	// Benutzer: ID "U001", Name "Alice", E-Mail "alice@test.com"

	switch testName {
	case "borrow_success":
		// TODO: Testen, dass das Ausleihen eines verfügbaren Buchs erfolgreich ist
		// 1. Bibliothek erstellen, Buch und Benutzer hinzufügen
		// 2. Das Buch ausleihen
		// 3. Überprüfen: kein Fehler, Buch nicht verfügbar, Benutzer hat Buch in der Liste
		// Drucke "PASS", wenn alle bestanden, oder "FAIL: [reason]", wenn einer fehlschlägt
		fmt.Println("FAIL: not implemented")

	case "borrow_unavailable":
		// TODO: Testen, dass das Ausleihen eines nicht verfügbaren Buchs einen Fehler zurückgibt
		// 1. Bibliothek erstellen, Buch und Benutzer hinzufügen
		// 2. Setze Available des Buchs auf false
		// 3. Versuche auszuleihen
		// 4. Überprüfe, dass ein Fehler zurückgegeben wird
		fmt.Println("FAIL: not implemented")

	case "borrow_invalid_user":
		// TODO: Teste, dass das Ausleihen mit ungültigem Benutzer einen Fehler zurückgibt
		// 1. Erstelle Bibliothek, füge nur das Buch hinzu (kein Benutzer)
		// 2. Versuche mit Benutzer-ID "U001" auszuleihen
		// 3. Überprüfe, dass ein Fehler zurückgegeben wird
		fmt.Println("FAIL: not implemented")

	case "return_success":
		// TODO: Teste, dass das Zurückgeben eines ausgeliehenen Buches erfolgreich ist
		// 1. Bibliothek erstellen, Buch und Benutzer hinzufügen
		// 2. Leihe das Buch zuerst aus
		// 3. Gib das Buch zurück
		// 4. Überprüfe: kein Fehler, Buch verfügbar, Liste des Benutzers leer
		fmt.Println("FAIL: not implemented")

	default:
		fmt.Println("FAIL: unknown test")
	}
}

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-Go-Compiler