Press enter to see results or esc to cancel.

Drops de testes – Asserções mais fluentes com FluentAssertions

Estamos fazendo uma série de artigos sobre testes do básico ao avançado com posts todas as terças, você pode ver todos os posts clicando aqui ou ver o post anterior clicando aqui.

Se você acompanhou nosso post sobre tipos de asserção, provavelmente notou que as asserções não são parecidas com a forma que falamos, algo como: “ValorA deve ser igual a ValorB”. Invés disso, as asserções tradicionais usam uma linguagem mais algorítmica, como “Assertivo que é igual ValorA e ValorB”.

Esta diferença entre a forma que falamos, parece pouca, mas em um grande volume, em uma grande bateria de testes, faz diferença.

FluentAssertions

Uma boa opção para as asserções é o pacote FluentAssertions, disponível para .NET.

O FluentAssertions é um biblioteca que irá “humanizar” a forma como escrevemos as asserções dos nossos testes. Ao invés de usarmos AreEqual, por exemplo, o FluentAssertions dispões dos métodos Should() e Be(), desta maneira uma asserção que seria escrita assim: Asset.AreEqual(valor1, valor2) ficará assim: valor1.Should().Be(valor2), traduzindo do inglês, valor1 deve ser valor2. Bem mais próximo do que falamos do que os asserts tradicionais, não acha?

Para utiliza-lo, basta instalar o pacote Nuget no seu projeto e importa-lo na classe de teste. Veja o exemplo abaixo:

using FluentAssertions;

Vejamos alguns exemplos de utilização do FluentAssertions abaixo:

Igualdade

[Test]
public void DeveRetornarOModeloDoCarroEsperado()
{
    //Arrange
    var minhaClasse = new MinhaClasse();

    //Act
    var resultado = minhaClasse.ObterCarro();

    //Assert
    resultado.Should().Be("Corsa");
}
[Test]
public void DeveRetornarOModeloDoCarroEsperado()
{
    //Arrange
    var minhaClasse = new MinhaClasse();

    //Act
    var resultado = minhaClasse.ObterCarro();

    //Assert
    resultado.Should().NotBe("Corsa");
}

Veja que no exemplo acima temos asserção de igualdade com Should() e Be(), que é equivalente ao Assert.AreEqual que tradicionalmente usamos. É interessante também que o FluentAssertions já possui a negativa da asserção, com o NotBe(), o que irá fazer a asserção que o valor não deve ser igual ao esperado. O Not é bem presente no FluentAssertions e você poderá usa-lo também nos exemplos que veremos a frente. Para não alongar o post, aqui veremos apenas os exemplos positivos, mas tente ver também as negativas, como NotBeEquivalentTo, NotBe e assim por diante.

Equivalência

[Test]
public void CarroRetornadoDeveSerCorsa()
{
    //Arrange
    var minhaClasse = new MinhaClasse();

    //Act
    var resultado = minhaClasse.ObterCarro();

    //Assert
    resultado.Should().BeEquivalentTo("Corsa");
}

Listas

[Test]
public void DeveRetornarListaDeCarrosEsperada()
{
    //Arrange
    var minhaClasse = new MinhaClasse();
    var listaEsperada = new Carros { "Corsa", "Onix", "Fox", "Sandero" } 

    //Act
    var resultado = minhaClasse.ObterCarro();

    //Assert
    resultado.Should().BeEquivalentTo(listaEsperada);
}
[Test]
public void DeveRetornarListaDeCarrosNula()
{
    //Arrange
    var minhaClasse = new MinhaClasse();

    //Act
    var resultado = minhaClasse.ObterCarros();

    //Assert
    resultado.Should().BeNull();
}
[Test]
public void DeveRetornarListaDeCarrosVazia()
{
    //Arrange
    var minhaClasse = new MinhaClasse();

    //Act
    var resultado = minhaClasse.ObterCarros();

    //Assert
    resultado.Should().BeEmpty();
}
[Test]
public void DeveRetornarApenasUmCarroNaLista()
{
    //Arrange
    var minhaClasse = new MinhaClasse();

    //Act
    var resultado = minhaClasse.ObterCarros();

    //Assert
    resultado.Should().HaveCount(1);
}

Boleanos

[Test]
public void DeveRetornarSeCarroÉHatch()
{
    //Arrange
    var minhaClasse = new MinhaClasse();

    //Act
    var resultado = minhaClasse.CarroÉHatch("Corsa");

    //Assert
    resultado.Should().BeTrue();
}
[Test]
public void DeveRetornarSeCarroÉHatch()
{
    //Arrange
    var minhaClasse = new MinhaClasse();

    //Act
    var resultado = minhaClasse.CarroÉHatch("Ferrai");

    //Assert
    resultado.Should().BeFalse();
}

Exceção

[Test]
public void DeveRetornarExceçãoSeValorInformadoNãoForUmCarro()
{
    //Arrange
    var minhaClasse = new MinhaClasse();

    //Act
    Action act = () => minhaClasse.ObterCarros("Árvore");

    //Assert
    act.Should().Throw<ArgumentException>();
}

O FluentAssertions ainda possui outros métodos além dos que vimos nos exemplos acima como o BePositive(), BeGreaterThan(), HaveElementAt() entre outros, você pode conferir todos os tipos de asserção na documentação da biblioteca, clicando aqui

 

Legal né!? Assim conseguimos ler a asserção do teste mais facilmente.

 

Até a próxima!

Tweet about this on TwitterShare on FacebookShare on LinkedInEmail this to someone
Comments

Leave a Comment