Menu
Coddy logo textTech

Tests et intégration

Fait partie de la section Programmation Orientée Objet du Journey GO de Coddy — leçon 104 sur 107.

challenge icon

Défi

Facile

Bouclons la boucle de notre système de gestion de bibliothèque en écrivant des tests qui vérifient que tout fonctionne correctement ! Vous allez créer un fichier de test qui valide les fonctionnalités de base de votre bibliothèque — en vous assurant que les livres peuvent être empruntés et retournés correctement, et que les conditions d'erreur sont gérées de manière appropriée.

Vous organiserez votre code sur cinq fichiers :

  • book.go : Votre structure Book avec les champs ID, Title, Author, ISBN et Available. Incluez le constructeur NewBook qui initialise les livres comme disponibles.
  • user.go : Votre structure User avec les champs ID, Name, Email et BorrowedBooks. Incluez le constructeur NewUser.
  • library.go : Votre structure Library avec des maps pour les livres et les utilisateurs, ainsi que les méthodes NewLibrary, AddBook, AddUser, Borrow et Return. La méthode Borrow doit retourner des erreurs pour un utilisateur invalide, un livre invalide ou un livre indisponible. La méthode Return doit retourner des erreurs pour un utilisateur invalide, un livre invalide ou un livre non emprunté.
  • library_test.go : C'est ici que vous écrirez vos fonctions de test ! Créez des tests qui vérifient :
    • TestBorrowSuccess — Vérifie que l'emprunt d'un livre disponible réussit (aucune erreur retournée), que le livre devient indisponible et que l'ID du livre est ajouté à la liste des emprunts de l'utilisateur.
    • TestBorrowUnavailable — Vérifie que l'emprunt d'un livre déjà emprunté retourne une erreur.
    • TestBorrowInvalidUser — Vérifie que l'emprunt avec un ID d'utilisateur inexistant retourne une erreur.
    • TestReturnSuccess — Vérifie que le retour d'un livre emprunté réussit, que le livre redevient disponible et que l'ID du livre est retiré de la liste des emprunts de l'utilisateur.

    Chaque test doit configurer sa propre bibliothèque avec les livres et utilisateurs nécessaires, effectuer l'opération et vérifier les résultats à l'aide de t.Error ou t.Errorf lorsque les assertions échouent.

  • main.go : Exécutez vos tests manuellement et rapportez les résultats. Lisez le nom du test à exécuter (borrow_success, borrow_unavailable, borrow_invalid_user ou return_success). En fonction du nom du test, configurez le scénario approprié et affichez PASS si toutes les assertions passent, ou FAIL: [reason] si une assertion échoue.

L'entrée suivante sera fournie :

  • Un nom de test : borrow_success, borrow_unavailable, borrow_invalid_user ou return_success

Pour chaque test, utilisez ces données de test standard (fixtures) :

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

Par exemple, étant donné :

borrow_success

Votre sortie devrait être :

PASS

Et étant donné :

borrow_unavailable

Votre sortie devrait être :

PASS

Et étant donné :

borrow_invalid_user

Votre sortie devrait être :

PASS

Et étant donné :

return_success

Votre sortie devrait être :

PASS

Pour borrow_success : Créez la bibliothèque, ajoutez le livre et l'utilisateur, empruntez le livre, vérifiez qu'il n'y a pas d'erreur, vérifiez que le livre est indisponible, vérifiez que l'utilisateur a le livre dans sa liste d'emprunts.

Pour borrow_unavailable : Créez la bibliothèque, ajoutez le livre et l'utilisateur, définissez le champ Available du livre sur false, tentez d'emprunter, vérifiez qu'une erreur est retournée.

Pour borrow_invalid_user : Créez la bibliothèque, ajoutez seulement le livre (pas d'utilisateur), tentez d'emprunter avec l'ID utilisateur U001, vérifiez qu'une erreur est retournée.

Pour return_success : Créez la bibliothèque, ajoutez le livre et l'utilisateur, empruntez d'abord le livre, puis retournez-le, vérifiez qu'il n'y a pas d'erreur, vérifiez que le livre est à nouveau disponible, vérifiez que la liste des emprunts de l'utilisateur est vide.

L'écriture de tests garantit que votre système de bibliothèque se comporte correctement et vous donne la confiance nécessaire pour apporter des modifications sans casser les fonctionnalités existantes !

Essayez vous-même

package main

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

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

	// Fixtures de test standard
	// 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: Tester que l'emprunt d'un livre disponible réussit
		// 1. Créer la bibliothèque, ajouter le livre et l'utilisateur
		// 2. Emprunter le livre
		// 3. Vérifier : pas d'erreur, livre indisponible, l'utilisateur a le livre dans sa liste
		// Afficher "PASS" si tout réussit, ou "FAIL: [reason]" en cas d'échec
		fmt.Println("FAIL: not implemented")

	case "borrow_unavailable":
		// TODO: Tester que l'emprunt d'un livre indisponible retourne une erreur
		// 1. Créer la bibliothèque, ajouter le livre et l'utilisateur
		// 2. Définir Available du livre à false
		// 3. Tenter d'emprunter
		// 4. Vérifier qu'une erreur est retournée
		fmt.Println("FAIL: not implemented")

	case "borrow_invalid_user":
		// TODO: Tester que l'emprunt avec un utilisateur invalide retourne une erreur
		// 1. Créer la bibliothèque, ajouter seulement le livre (pas d'utilisateur)
		// 2. Tenter d'emprunter avec l'ID utilisateur "U001"
		// 3. Vérifier qu'une erreur est retournée
		fmt.Println("FAIL: not implemented")

	case "return_success":
		// TODO: Tester que le retour d'un livre emprunté réussit
		// 1. Créer la bibliothèque, ajouter le livre et l'utilisateur
		// 2. Emprunter d'abord le livre
		// 3. Retourner le livre
		// 4. Vérifier : pas d'erreur, livre disponible, liste de l'utilisateur vide
		fmt.Println("FAIL: not implemented")

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

Toutes les leçons de Programmation Orientée Objet