Skip to main content

Command Palette

Search for a command to run...

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

Published
3 min read

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!

O post Drops de testes – Asserções mais fluentes com FluentAssertions apareceu primeiro em High5Devs.