Testes Parametrizados com JUnit 5: Um Exemplo Prático 🚀

Gilson Silva - Oct 2 - - Dev Community

Os testes parametrizados são uma poderosa funcionalidade do JUnit 5 que permite executar o mesmo teste várias vezes com diferentes conjuntos de dados. Isso é especialmente útil quando você deseja testar um método com várias entradas e garantir que ele se comporte corretamente em todos os cenários.

Neste artigo, vamos explorar como criar testes parametrizados usando o JUnit 5, com base no exemplo de um teste que verifica a criação de um objeto Planet com dados inválidos.

Antes, o que são Testes Parametrizados?

Testes parametrizados permitem que você execute o mesmo teste várias vezes com diferentes argumentos. Em vez de duplicar o código de teste para cada conjunto de dados, você pode fornecer uma lista de argumentos e o JUnit 5 executará o teste para cada um deles.

No JUnit 5, a anotação @ParameterizedTest é usada para indicar que um método de teste deve ser executado várias vezes com diferentes parâmetros. Esses parâmetros podem ser fornecidos de várias maneiras, como por meio de métodos estáticos (@MethodSource), valores enumerados (@EnumSource), ou até mesmo listas de valores (@ValueSource). Em nosso exemplo, iremos utilizar @MethodSource.

Exemplo de Teste SEM Parametrizado

Image description

Exemplo de Teste Parametrizado

Vamos considerar o seguinte cenário: temos uma classe Planet que possui três atributos: name, climate e terrain. Queremos garantir que, ao tentar salvar um planeta com dados inválidos (como null ou strings vazias), uma exceção seja lançada.

Aqui está o exemplo de um teste parametrizado que cobre esse cenário:

Image description

Explicação do Código:

  1. @ParameterizedTest: Esta anotação indica que o método de teste será executado várias vezes, uma para cada conjunto de dados fornecido.

  2. @MethodSource("providesInvalidPlanets"): Aqui, estamos usando um método estático chamado providesInvalidPlanets para fornecer os argumentos para o teste. Esse método retorna um Stream de argumentos que serão passados para o teste.

  3. @DisplayName: Esta anotação é usada para fornecer uma descrição legível para o teste, o que facilita a leitura dos relatórios de teste.

  4. assertThatThrownBy: Este método, da biblioteca AssertJ, é usado para verificar se uma exceção é lançada ao tentar salvar um planeta com dados inválidos. Estamos esperando que uma RuntimeException seja lançada.

Método de Fornecimento de Dados

O método providesInvalidPlanets é responsável por fornecer os diferentes conjuntos de dados que serão usados no teste. Ele retorna um Stream de Arguments, onde cada Arguments.of representa um conjunto de dados (neste caso, um objeto Planet com valores inválidos).

Image description

Explicação do Método:

  • Stream.of: Estamos criando um Stream de argumentos, onde cada argumento é um objeto Planet com diferentes combinações de valores inválidos (como null ou strings vazias).

  • Arguments.of: Cada chamada a Arguments.of cria um conjunto de argumentos que será passado para o teste. Neste caso, estamos criando planetas com combinações inválidas de name, climate e terrain.

Image description

Vantagens dos Testes Parametrizados

  1. Redução de Código Duplicado: Em vez de escrever vários métodos de teste para cada cenário, você pode usar um único método parametrizado, o que reduz a duplicação de código.

  2. Facilidade de Manutenção: Se você precisar adicionar ou modificar um cenário de teste, basta alterar o método que fornece os dados, sem precisar duplicar o código de teste.

  3. Cobertura Abrangente: Testes parametrizados permitem que você cubra uma ampla gama de cenários com facilidade, garantindo que seu código seja testado em diferentes condições.

Conclusão

Os testes parametrizados são uma ferramenta poderosa no JUnit 5, permitindo que você execute o mesmo teste com diferentes conjuntos de dados de forma eficiente. No exemplo acima, mostramos como testar a criação de um objeto Planet com dados inválidos, garantindo que uma exceção seja lançada em todos os cenários.

Essa abordagem não só melhora a cobertura de testes, mas também torna o código de teste mais limpo e fácil de manter. Se você ainda não está usando testes parametrizados em seus projetos, agora é um ótimo momento para começar!

. . . .
Terabox Video Player