Menu
Coddy logo textTech

Testes e Integração

Parte da seção Programação Orientada a Objetos do Journey de Java da Coddy. Lição 83 de 87.

challenge icon

Desafio

Fácil

Parabéns por criar seu Sistema de Gerenciamento de Biblioteca! É hora de reunir tudo e verificar se todos os componentes funcionam corretamente como um sistema integrado. Você criará um cenário de teste abrangente que exercita todos os recursos desenvolvidos ao longo deste projeto.

Você trabalhará com os sete arquivos do seu sistema concluído:

  • Book.java: sua classe Book com isbn, title, author, isAvailable, borrowedBy e todos os métodos associados, incluindo getDetails().
  • User.java: sua classe User com id, name, a lista borrowedBooks e métodos para pegar/devolver livros.
  • LibraryException.java: sua classe base de exceção personalizada.
  • BookNotAvailableException.java: sua exceção para livros indisponíveis.
  • LibraryAdmin.java: sua interface de administrador e a implementação AdminService.
  • Library.java: sua classe Library completa com todos os métodos: adicionar/remover livros, registrar usuários, pegar/devolver livros, pesquisar e tratar exceções.
  • Main.java: seu teste de integração que demonstrará todo o sistema funcionando em conjunto.

Na sua classe Main, você processará uma série de comandos que testam todos os principais recursos do seu sistema de biblioteca. Os comandos vêm como uma única string separada por vírgulas, com estes formatos:

  • ADD_BOOK:isbn:title:author - Adicionar um livro por meio do AdminService
  • REGISTER_USER:id:name - Registrar um usuário por meio do AdminService
  • BORROW:userId:isbn - Pegar um livro (com tratamento de exceções)
  • RETURN:userId:isbn - Devolver um livro
  • SEARCH_TITLE:keyword - Pesquisar livros por título
  • SEARCH_AUTHOR:keyword - Pesquisar livros por autor
  • REMOVE_BOOK:isbn - Remover um livro por meio do AdminService

Processe cada comando e exiba a saída apropriada:

  • ADD_BOOK: Added: [title]
  • REGISTER_USER: Registered: [name]
  • BORROW: Exiba a mensagem de sucesso ou Error: [exception message]
  • RETURN: [userName] returned [bookTitle]
  • SEARCH_TITLE: Exiba Search '[keyword]': seguido pelos detalhes de cada livro correspondente, ou No results
  • SEARCH_AUTHOR: Mesmo formato da pesquisa por título
  • REMOVE_BOOK: Removed: [isbn] ou Cannot remove: [isbn]

Após todos os comandos, exiba um resumo final:

  • --- Final Status ---
  • Books: [count]
  • Users: [count]
  • Para cada usuário, exiba [name]: [borrowedCount] book(s)

Você receberá uma entrada: a string de comandos separada por vírgulas.

Por exemplo, com a entrada 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, sua saída seria:

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)

Este desafio final valida se todos os seus componentes, classes, interfaces, exceções e a lógica da biblioteca funcionam juntos perfeitamente. Você criou um Sistema de Gerenciamento de Biblioteca completo e robusto!

Experimente você mesmo

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

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Ler os comandos separados por vírgula
        String input = scanner.nextLine();
        String[] commands = input.split(",");
        
        // Criar Library e AdminService
        Library library = new Library();
        AdminService adminService = new AdminService(library);
        
        // Processar cada comando
        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: Adicionar tratamento para o comando RETURN
            // TODO: Adicionar tratamento para o comando SEARCH_TITLE
            // TODO: Adicionar tratamento para o comando SEARCH_AUTHOR
        }
        
        // TODO: Imprimir status final
        // --- Final Status ---
        // Livros: [count]
        // Usuários: [count]
        // Para cada usuário: [name]: [borrowedCount] livro(s)
        System.out.println("Operations completed");
    }
}

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de Java online