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 concluir seu projeto de Sistema de Biblioteca adicionando testes unitários! Os testes são essenciais para garantir que seu código funcione corretamente e continue funcionando conforme você fizer 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 existente do seu projeto, 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 o controle de empréstimos, a constante MaxBooks, CanBorrow() e os métodos para gerenciar livros emprestados.
  • Library.cs: Mantenha sua classe Library com a lógica de empréstimos, os métodos de pesquisa e os métodos GetAllBooks() e GetAllUsers().
  • LibraryTests.cs: Este é seu novo arquivo de teste! Crie uma classe de teste que verifique se seu sistema de biblioteca funciona corretamente. Você escreverá métodos de teste que verificam vários cenários e informam se cada teste foi aprovado ou reprovado.
  • 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 - Verifique se o empréstimo de um livro disponível é bem-sucedido e altera sua disponibilidade
  • TestBookBorrowUnavailable - Verifique se o empréstimo de um livro que já foi emprestado falha apropriadamente
  • TestUserBorrowingLimit - Verifique se os usuários não podem pegar emprestados mais de 3 livros
  • TestBookReturn - Verifique se a devolução de um livro emprestado funciona corretamente
  • TestSearchByAuthor - Verifique se a pesquisa por autor retorna os livros corretos

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

Você receberá as seguintes entradas:

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

Para cada teste executado, exiba o resultado no formato:

{TestName}: {PASS|FAIL}

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

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

Por exemplo, se a entrada for:

3

A saída deverá 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 deverá 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, garantindo o isolamento. Dessa forma, o estado de um teste não afeta outro. Pense em cada teste como uma verificação independente de um comportamento específico do 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

Pratique por conta própria: Compilador de C# online