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!
O post Drops de testes – Asserções mais fluentes com FluentAssertions apareceu primeiro em High5Devs.

