Menu
CoddyTech

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 Library System adicionando testes unitários! Testar é essencial para garantir que seu código funcione corretamente e continue funcionando à medida que você faz alterações. Você criará um arquivo de teste dedicado que verifica as principais funcionalidades 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 os 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 a tentativa de emprestar um livro que já está emprestado falha como esperado
  • 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 valor booleano que indique se o teste foi aprovado. 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 a executar (1-5, correspondendo aos testes listados acima)

Para cada teste executado, imprima o resultado no formato:

{TestName}: {PASS|FAIL}

Depois que todos os testes forem concluídos, imprima 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, a fim de garantir o isolamento. Assim, o estado de um teste não afetará outro. Pense em cada teste como uma verificação independente de um comportamento específico do seu sistema!

Experimente você mesmo

using System;

namespace LibrarySystem
{
    class Program
    {
        public static void Main(string[] args)
        {
            // Leia o número de testes a executar
            int numTests = Convert.ToInt32(Console.ReadLine());

            // TODO: Crie um objeto LibraryTests e execute os primeiros numTests testes
        }
    }
}

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

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