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 avoir créé votre système de gestion de bibliothèque ! Il est temps de tout réunir 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 utilise toutes les fonctionnalités que vous avez développées au cours 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, notamment getDetails().
  • User.java : votre classe User avec id, name, la liste borrowedBooks et les méthodes permettant d'emprunter et de rendre des livres.
  • LibraryException.java : votre classe d'exception personnalisée de base.
  • BookNotAvailableException.java : votre exception pour les livres indisponibles.
  • LibraryAdmin.java : votre interface d'administration et votre implémentation AdminService.
  • Library.java : votre classe Library complète avec toutes les méthodes : ajout et suppression de livres, inscription d'utilisateurs, emprunt et retour, recherche et gestion des exceptions.
  • Main.java : votre test d'intégration qui démontrera le fonctionnement de l'ensemble du système.

Dans votre classe Main, vous traiterez une série de commandes qui testent toutes les fonctionnalités principales de votre système de bibliothèque. Les commandes sont fournies sous la forme d'une seule chaîne séparée par des virgules, selon les formats suivants :

  • ADD_BOOK:isbn:title:author - Ajouter un livre via AdminService
  • REGISTER_USER:id:name - Inscrire un utilisateur via AdminService
  • BORROW:userId:isbn - Emprunter un livre (avec gestion des exceptions)
  • RETURN:userId:isbn - Rendre 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 le résultat approprié :

  • ADD_BOOK : Added: [title]
  • REGISTER_USER : Registered: [name]
  • BORROW : afficher le message de réussite ou Error: [exception message]
  • RETURN : [userName] returned [bookTitle]
  • SEARCH_TITLE : afficher Search '[keyword]':, suivi des détails de chaque livre correspondant, ou No results
  • SEARCH_AUTHOR : même format que pour 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ées 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 vérifie que tous vos composants, classes, interfaces, exceptions et la logique de la bibliothèque fonctionnent ensemble de manière fluide. Vous avez créé 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
        // --- Final Status ---
        // 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

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