Menu
Coddy logo textTech

Testing & Integration

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

challenge icon

Aufgabe

Einfach

Lassen Sie uns unser Bibliotheksverwaltungssystem vervollständigen, indem wir Tests schreiben, die überprüfen, ob alles korrekt funktioniert! Sie erstellen eine Testdatei, die die Kernfunktionalität Ihrer Bibliothek validiert – um sicherzustellen, dass Bücher ordnungsgemäß ausgeliehen und zurückgegeben werden können und dass Fehlerbedingungen korrekt gehandhabt werden.

Sie organisieren Ihren Code in fünf Dateien:

  • book.go: Ihre Book-Struktur mit den Feldern ID, Title, Author, ISBN und Available. Fügen Sie den NewBook-Konstruktor hinzu, der Bücher als verfügbar initialisiert.
  • user.go: Ihre User-Struktur mit den Feldern ID, Name, Email und BorrowedBooks. Fügen Sie den NewUser-Konstruktor hinzu.
  • library.go: Ihre Library-Struktur mit Maps für Bücher und Benutzer, zusammen mit den Methoden NewLibrary, AddBook, AddUser, Borrow und Return. Die Methode Borrow sollte Fehler für ungültige Benutzer, ungültige Bücher oder nicht verfügbare Bücher zurückgeben. Die Methode Return sollte Fehler für ungültige Benutzer, ungültige Bücher oder nicht ausgeliehene Bücher zurückgeben.
  • library_test.go: Hier schreiben Sie Ihre Testfunktionen! Erstellen Sie Tests, die Folgendes überprüfen:
    • TestBorrowSuccess — Überprüfen Sie, ob das Ausleihen eines verfügbaren Buches erfolgreich ist (kein Fehler zurückgegeben), das Buch als nicht verfügbar markiert wird und die Buch-ID zur Liste der ausgeliehenen Bücher des Benutzers hinzugefügt wird.
    • TestBorrowUnavailable — Überprüfen Sie, ob das Ausleihen eines bereits ausgeliehenen Buches einen Fehler zurückgibt.
    • TestBorrowInvalidUser — Überprüfen Sie, ob das Ausleihen mit einer nicht existierenden Benutzer-ID einen Fehler zurückgibt.
    • TestReturnSuccess — Überprüfen Sie, ob die Rückgabe eines ausgeliehenen Buches erfolgreich ist, das Buch wieder verfügbar wird und die Buch-ID aus der Liste der ausgeliehenen Bücher des Benutzers entfernt wird.

    Jeder Test sollte seine eigene Bibliothek mit den erforderlichen Büchern und Benutzern einrichten, die Operation ausführen und die Ergebnisse mit t.Error oder t.Errorf prüfen, wenn Assertionen fehlschlagen.

  • main.go: Führen Sie Ihre Tests manuell aus und berichten Sie die Ergebnisse. Lesen Sie den Namen des auszuführenden Tests (borrow_success, borrow_unavailable, borrow_invalid_user oder return_success). Richten Sie basierend auf dem Testnamen das entsprechende Szenario ein und geben Sie PASS aus, wenn alle Assertionen 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

Verwenden Sie für jeden Test diese Standard-Testdaten (Fixtures):

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

Zum Beispiel, gegeben:

borrow_success

Sollte Ihre Ausgabe sein:

PASS

Und gegeben:

borrow_unavailable

Sollte Ihre Ausgabe sein:

PASS

Und gegeben:

borrow_invalid_user

Sollte Ihre Ausgabe sein:

PASS

Und gegeben:

return_success

Sollte Ihre Ausgabe sein:

PASS

Für borrow_success: Bibliothek erstellen, Buch und Benutzer hinzufügen, das Buch ausleihen, verifizieren, dass kein Fehler auftritt, verifizieren, dass das Buch nicht verfügbar ist, verifizieren, dass der Benutzer das Buch in seiner Liste der ausgeliehenen Bücher hat.

Für borrow_unavailable: Bibliothek erstellen, Buch und Benutzer hinzufügen, Available des Buches auf false setzen, Ausleihversuch unternehmen, verifizieren, dass ein Fehler zurückgegeben wird.

Für borrow_invalid_user: Bibliothek erstellen, nur das Buch hinzufügen (kein Benutzer), Ausleihversuch mit Benutzer-ID U001 unternehmen, verifizieren, dass ein Fehler zurückgegeben wird.

Für return_success: Bibliothek erstellen, Buch und Benutzer hinzufügen, das Buch zuerst ausleihen, dann zurückgeben, verifizieren, dass kein Fehler auftritt, verifizieren, dass das Buch wieder verfügbar ist, verifizieren, dass die Liste der ausgeliehenen Bücher des Benutzers leer ist.

Das Schreiben von Tests stellt sicher, dass sich Ihr Bibliothekssystem korrekt verhält, und gibt Ihnen die Sicherheit, Änderungen vorzunehmen, ohne bestehende Funktionen 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-Testdaten
	// Book: ID "B001", Title "Go Programming", Author "John Doe", ISBN "123-456"
	// User: ID "U001", Name "Alice", Email "alice@test.com"

	switch testName {
	case "borrow_success":
		// TODO: Testen, dass das Ausleihen eines verfügbaren Buches erfolgreich ist
		// 1. Library erstellen, Buch und User hinzufügen
		// 2. Das Buch ausleihen
		// 3. Überprüfen: kein Fehler, Buch nicht verfügbar, User hat Buch in der Liste
		// Gibt "PASS" aus, wenn alles bestanden ist, oder "FAIL: [Grund]", falls etwas fehlschlägt
		fmt.Println("FAIL: not implemented")

	case "borrow_unavailable":
		// TODO: Testen, dass das Ausleihen eines nicht verfügbaren Buches einen Fehler zurückgibt
		// 1. Library erstellen, Buch und User hinzufügen
		// 2. Available des Buches auf false setzen
		// 3. Versuch, das Buch auszuleihen
		// 4. Überprüfen, ob ein Fehler zurückgegeben wird
		fmt.Println("FAIL: not implemented")

	case "borrow_invalid_user":
		// TODO: Testen, dass das Ausleihen mit einem ungültigen User einen Fehler zurückgibt
		// 1. Library erstellen, nur das Buch hinzufügen (kein User)
		// 2. Versuch, mit der User-ID "U001" auszuleihen
		// 3. Überprüfen, ob ein Fehler zurückgegeben wird
		fmt.Println("FAIL: not implemented")

	case "return_success":
		// TODO: Testen, dass das Zurückgeben eines ausgeliehenen Buches erfolgreich ist
		// 1. Library erstellen, Buch und User hinzufügen
		// 2. Zuerst das Buch ausleihen
		// 3. Das Buch zurückgeben
		// 4. Überprüfen: kein Fehler, Buch verfügbar, Liste des Users ist leer
		fmt.Println("FAIL: not implemented")

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

Alle Lektionen in Objektorientierte Programmierung