Menu
Coddy logo textTech

Tests et intégration

Fait partie de la section Programmation Orientée Objet du Journey Java de Coddy — leçon 83 sur 87.

challenge icon

Défi

Facile

Félicitations pour la construction de votre système de gestion de bibliothèque ! Il est temps de tout rassembler et de vérifier que tous les composants fonctionnent correctement en tant que système intégré. Vous allez créer un scénario de test complet qui exerce toutes les fonctionnalités que vous avez développées tout au long de ce projet.

Vous travaillerez avec les sept fichiers de votre système terminé :

  • Book.java : Votre classe Book avec isbn, title, author, isAvailable, borrowedBy, et toutes les méthodes associées, y compris getDetails().
  • User.java : Votre classe User avec id, name, la liste borrowedBooks, et les méthodes pour emprunter/retourner des livres.
  • LibraryException.java : Votre classe d'exception personnalisée de base.
  • BookNotAvailableException.java : Votre exception pour les livres non disponibles.
  • LibraryAdmin.java : Votre interface d'administration et l'implémentation AdminService.
  • Library.java : Votre classe Library complète avec toutes les méthodes — ajout/suppression de livres, enregistrement des utilisateurs, emprunt/retour, recherche et gestion des exceptions.
  • Main.java : Votre test d'intégration qui démontrera l'ensemble du système fonctionnant de concert.

Dans votre classe Main, vous traiterez une série de commandes qui testent chaque fonctionnalité majeure de votre système de bibliothèque. Les commandes arrivent sous la forme d'une seule chaîne de caractères séparée par des virgules avec ces formats :

  • ADD_BOOK:isbn:title:author - Ajouter un livre via AdminService
  • REGISTER_USER:id:name - Enregistrer un utilisateur via AdminService
  • BORROW:userId:isbn - Emprunter un livre (avec gestion des exceptions)
  • RETURN:userId:isbn - Retourner un livre
  • SEARCH_TITLE:keyword - Rechercher des livres par titre
  • SEARCH_AUTHOR:keyword - Rechercher des livres par auteur
  • REMOVE_BOOK:isbn - Supprimer un livre via AdminService

Traitez chaque commande et affichez la sortie appropriée :

  • ADD_BOOK : Added: [title]
  • REGISTER_USER : Registered: [name]
  • BORROW : Affichez le message de succès ou Error: [exception message]
  • RETURN : [userName] returned [bookTitle]
  • SEARCH_TITLE : Affichez Search '[keyword]': suivi des détails de chaque livre correspondant, ou No results
  • SEARCH_AUTHOR : Même format que la recherche par titre
  • REMOVE_BOOK : Removed: [isbn] ou Cannot remove: [isbn]

Après toutes les commandes, affichez un résumé final :

  • --- Final Status ---
  • Books: [count]
  • Users: [count]
  • Pour chaque utilisateur, affichez [name]: [borrowedCount] book(s)

Vous recevrez une seule entrée : la chaîne de commandes séparée par des virgules.

Par exemple, avec l'entrée ADD_BOOK:ISBN-001:Clean Code:Robert Martin,ADD_BOOK:ISBN-002:Effective Java:Joshua Bloch,REGISTER_USER:U001:Alice,REGISTER_USER:U002:Bob,BORROW:U001:ISBN-001,BORROW:U002:ISBN-001,SEARCH_TITLE:java,RETURN:U001:ISBN-001,REMOVE_BOOK:ISBN-001, votre sortie serait :

Added: Clean Code
Added: Effective Java
Registered: Alice
Registered: Bob
Alice borrowed Clean Code
Error: Book not available: ISBN-001
Search 'java':
[ISBN-002] Effective Java by Joshua Bloch
Alice returned Clean Code
Removed: ISBN-001
--- Final Status ---
Books: 1
Users: 2
Alice: 0 book(s)
Bob: 0 book(s)

Ce défi final valide que tous vos composants — classes, interfaces, exceptions et la logique de la bibliothèque — fonctionnent ensemble de manière transparente. Vous avez construit un système de gestion de bibliothèque complet et robuste !

Essayez vous-même

import java.util.Scanner;
import java.util.ArrayList;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Lire les commandes séparées par des virgules
        String input = scanner.nextLine();
        String[] commands = input.split(",");
        
        // Créer Library et AdminService
        Library library = new Library();
        AdminService adminService = new AdminService(library);
        
        // Traiter chaque commande
        for (String command : commands) {
            String[] parts = command.split(":");
            String operation = parts[0];
            
            if (operation.equals("ADD_BOOK")) {
                String isbn = parts[1];
                String title = parts[2];
                String author = parts[3];
                if (adminService.addBook(isbn, title, author)) {
                    System.out.println("Added: " + title);
                }
            } else if (operation.equals("REMOVE_BOOK")) {
                String isbn = parts[1];
                if (adminService.removeBook(isbn)) {
                    System.out.println("Removed: " + isbn);
                } else {
                    System.out.println("Cannot remove: " + isbn);
                }
            } else if (operation.equals("REGISTER_USER")) {
                String id = parts[1];
                String name = parts[2];
                if (adminService.registerUser(id, name)) {
                    System.out.println("Registered: " + name);
                }
            } else if (operation.equals("BORROW")) {
                String userId = parts[1];
                String isbn = parts[2];
                try {
                    String result = library.borrowBook(userId, isbn);
                    System.out.println(result);
                } catch (LibraryException e) {
                    System.out.println("Error: " + e.getMessage());
                }
            }
            // TODO: Ajouter la gestion de la commande RETURN
            // TODO: Ajouter la gestion de la commande SEARCH_TITLE
            // TODO: Ajouter la gestion de la commande SEARCH_AUTHOR
        }
        
        // TODO: Afficher le statut final
        // --- Statut final ---
        // Livres : [count]
        // Utilisateurs : [count]
        // Pour chaque utilisateur : [name] : [borrowedCount] livre(s)
        System.out.println("Operations completed");
    }
}

Toutes les leçons de Programmation Orientée Objet