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

Menons notre système de gestion de bibliothèque à son terme en écrivant des tests qui vérifient que tout fonctionne correctement ! Vous allez créer un fichier de test qui valide les fonctionnalités essentielles de votre bibliothèque : vérifier que les books peuvent être empruntés et rendus correctement, et que les conditions d’erreur sont gérées correctement.

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 books 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 books et les utilisateurs, ainsi que les méthodes NewLibrary, AddBook, AddUser, Borrow et Return. La méthode Borrow doit renvoyer des erreurs en cas d’utilisateur invalide, de book invalide ou de book indisponible. La méthode Return doit renvoyer des erreurs en cas d’utilisateur invalide, de book invalide ou de book non emprunté.
  • library_test.go : c’est ici que vous écrirez vos fonctions de test ! Créez des tests qui vérifient :
    • TestBorrowSuccess : vérifiez que l’emprunt d’un book disponible réussit (aucune erreur renvoyée), que le book devient indisponible et que l’ID du book est ajouté à la liste des books empruntés par l’utilisateur
    • TestBorrowUnavailable : vérifiez que l’emprunt d’un book déjà emprunté renvoie une erreur
    • TestBorrowInvalidUser : vérifiez que l’emprunt avec un ID d’utilisateur inexistant renvoie une erreur
    • TestReturnSuccess : vérifiez que le retour d’un book emprunté réussit, que le book redevient disponible et que l’ID du book est supprimé de la liste des books empruntés par l’utilisateur

    Chaque test doit configurer sa propre bibliothèque avec les books et les 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 affichez 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 réussissent, 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 :

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

Par exemple, avec :

borrow_success

Votre sortie doit être :

PASS

Et avec :

borrow_unavailable

Votre sortie doit être :

PASS

Et avec :

borrow_invalid_user

Votre sortie doit être :

PASS

Et avec :

return_success

Votre sortie doit être :

PASS

Pour borrow_success : créez une bibliothèque, ajoutez un book et un utilisateur, empruntez le book, vérifiez qu’il n’y a aucune erreur, vérifiez que le book est indisponible et vérifiez que l’utilisateur possède le book dans sa liste de books empruntés.

Pour borrow_unavailable : créez une bibliothèque, ajoutez un book et un utilisateur, définissez Available du book sur false, tentez de l’emprunter et vérifiez qu’une erreur est renvoyée.

Pour borrow_invalid_user : créez une bibliothèque, ajoutez uniquement le book (sans utilisateur), tentez d’emprunter avec l’ID utilisateur U001 et vérifiez qu’une erreur est renvoyée.

Pour return_success : créez une bibliothèque, ajoutez un book et un utilisateur, empruntez d’abord le book, puis rendez-le, vérifiez qu’il n’y a aucune erreur, vérifiez que le book est de nouveau disponible et vérifiez que la liste de books empruntés par l’utilisateur est vide.

Écrire des tests garantit que votre système de bibliothèque se comporte correctement et vous donne la confiance nécessaire pour effectuer 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
	// Livre : ID "B001", Titre "Go Programming", Auteur "John Doe", ISBN "123-456"
	// Utilisateur : ID "U001", Nom "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 renvoie 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 renvoyée
		fmt.Println("FAIL: not implemented")

	case "borrow_invalid_user":
		// TODO: Tester que l'emprunt avec un utilisateur invalide renvoie une erreur
		// 1. Créer la bibliothèque, ajouter uniquement le livre (pas d'utilisateur)
		// 2. Tenter d'emprunter avec l'ID utilisateur "U001"
		// 3. Vérifier qu'une erreur est renvoyé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

Entraînez-vous par vous-même : Compilateur Go en ligne