C#

8 nov, 2022

Testes unitários: Reaproveitando casos de teste com c# (parte 3)

Publicidade

No artigo anterior da série sobre Testes Unitários, aprendemos a identificar a cobertura de testes através de um relatório e notamos que nossa classe não está totalmente testada. Na terceira e última parte desta série vamos criar outro caso de teste para validar aquela condição que nos retorna -1. Para que isso aconteça temos 3 cenários diferente que nos levam a este mesmo resultado:

  • Se o primeiro parâmetro for menor que zero.
  • Se o segundo parâmetro for menor que zero.
  • Se ambos os parâmetros forem menores que zero.

A primeira coisa que pensamos em fazer é criar um caso de teste para cada alternativa, mas isso não será necessário. Vamos criar apenas um caso e reaproveitá-lo. Assim como um método, podemos fazer com que o nosso caso de teste aceite parâmetros! Nosso novo caso de teste ficará dessa forma:

[Theory(DisplayName = "Given invalid numbers, when sum then should fail.")]
[InlineData(-5, 7)]
[InlineData(10, -8)]
[InlineData(-11, -3)]
public void GivenInvalidNumbers_WhenSum_ThenShouldFail(int firstNumber, int secondNumber)
{
    //arrange
    const int resultExpected = -1;

    //act
    var resultActual = Calculator.Sum(firstNumber, secondNumber);

    //assert
    Assert.Equal(resultExpected, resultActual);
}

Utilizaremos a notação Theory no lugar de Fact e adicionaremos abaixo a notação InlineData. Esta notação suporta quantos valores precisarmos. Como nosso método precisa de dois parâmetros, informaremos dois valores. E repetiremos a notação três vezes, uma para cada cenário de teste. Dessa forma, com apenas um método de teste conseguimos validar três cenários. E por fim, no método de teste adicionamos parâmetros que receberão os valores que definimos em cada notação InlineData. Agora vamos gerar o relatório novamente. Obs: para isso precisamos executar o comando que gera o arquivo XML e o comando para gerar o relatório. O comando que instala o ReportGenerator só precisa ser executado uma vez.

Agora em nosso relatório todas as linhas ficaram verdes!

E assim concluímos os testes da nossa classe. Testes unitários não é um bicho de sete cabeças. O que o torna complicado, na maioria das vezes, é o sistema que está sendo testado e por causa disso muitos desistem de aprender sobre ou aplicá-los. Um sistema não orientado a testes trará muitos desafios, porém muito aprendizado e certamente elevará a qualidade do seu código. Eu espero ter lhe ajudado a dar o primeiro passo no mundo dos testes. Até a próxima!