Menu
Coddy logo textTech

Testes de Unidade (NUnit/xUnit)

Parte da seção Programação Orientada a Objetos do Journey de C# da Coddy — lição 67 de 70.

challenge icon

Desafio

Fácil

Vamos completar o seu projeto de Sistema de Biblioteca adicionando testes unitários! Testar é essencial para garantir que seu código funcione corretamente e continue funcionando conforme você faz alterações. Você criará um arquivo de teste dedicado que verifica a funcionalidade principal do seu sistema de biblioteca.

Você continuará trabalhando com a estrutura do seu projeto existente, adicionando um novo arquivo de teste:

  • Book.cs: Mantenha sua classe Book com Id, Title, Author, IsAvailable e os métodos Borrow() e Return().
  • User.cs: Mantenha sua classe User com rastreamento de empréstimos, a constante MaxBooks, CanBorrow() e métodos para gerenciar livros emprestados.
  • Library.cs: Mantenha sua classe Library com a lógica de empréstimo, métodos de busca e os métodos GetAllBooks() e GetAllUsers().
  • LibraryTests.cs: Este é o seu novo arquivo de teste! Crie uma classe de teste que verifique se o seu sistema de biblioteca funciona corretamente. Você escreverá métodos de teste que verificam vários cenários e relatam se cada teste passa ou falha.
  • Program.cs: Seu ponto de entrada que executa os testes e exibe os resultados.

Sua classe de teste deve incluir métodos que testem estes cenários:

  • TestBookBorrow - Verifica se o empréstimo de um livro disponível é bem-sucedido e altera sua disponibilidade
  • TestBookBorrowUnavailable - Verifica se o empréstimo de um livro já emprestado falha apropriadamente
  • TestUserBorrowingLimit - Verifica se os usuários não podem emprestar mais de 3 livros
  • TestBookReturn - Verifica se a devolução de um livro emprestado funciona corretamente
  • TestSearchByAuthor - Verifica se a busca por autor retorna os livros corretos

Cada método de teste deve retornar um booleano indicando se o teste passou. Crie um executor de testes simples que execute todos os testes e imprima os resultados.

Você receberá as seguintes entradas:

  • Número de cenários de teste para executar (1-5, correspondendo aos testes listados acima)

Para cada teste executado, imprima o resultado no formato:

{TestName}: {PASS|FAIL}

Após a conclusão de todos os testes, imprima um resumo:

--- Test Summary ---
Passed: {count}
Failed: {count}
Total: {count}

Por exemplo, se a entrada for:

3

A saída deve ser:

TestBookBorrow: PASS
TestBookBorrowUnavailable: PASS
TestUserBorrowingLimit: PASS
--- Test Summary ---
Passed: 3
Failed: 0
Total: 3

Outro exemplo com todos os 5 testes:

5

A saída deve ser:

TestBookBorrow: PASS
TestBookBorrowUnavailable: PASS
TestUserBorrowingLimit: PASS
TestBookReturn: PASS
TestSearchByAuthor: PASS
--- Test Summary ---
Passed: 5
Failed: 0
Total: 5

Seus testes devem criar novas instâncias de Book, User e Library para cada teste para garantir o isolamento. Dessa forma, o estado de um teste não afeta o outro. Pense em cada teste como uma verificação independente de um comportamento específico em seu sistema!

Experimente você mesmo

using System;
using Library.Tests;

class Program
{
    public static void Main(string[] args)
    {
        // TODO: Crie uma instância de BorrowingServiceTests
        
        // TODO: Execute cada método de teste, imprimindo o nome do teste antes de cada resultado
        // Exemplo:
        // Console.WriteLine("BorrowBook_WhenBookAvailable_ReturnsTrue");
        // tests.BorrowBook_WhenBookAvailable_ReturnsTrue();
        
    }
}

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