DEV Community

Juarez Júnior
Juarez Júnior

Posted on

Tornando Testes Mais Expressivos com FluentAssertions

O FluentAssertions é uma biblioteca que torna os testes unitários mais expressivos e legíveis, permitindo que você escreva asserções de maneira mais fluente e natural. Ele melhora a legibilidade dos testes, oferecendo uma API rica para comparar objetos, verificar exceções e validar comportamentos esperados em diversas situações. Neste exemplo, vamos demonstrar como usar o FluentAssertions para fazer asserções em um teste de comparação de objetos.

Bibliotecas:

Para usar a biblioteca FluentAssertions, instale o seguinte pacote NuGet no seu projeto:

Install-Package FluentAssertions
Enter fullscreen mode Exit fullscreen mode

Código de Exemplo:

using FluentAssertions;
using Xunit;

namespace FluentAssertionsExemplo
{
    public class ProdutoTests
    {
        [Fact]
        public void Produto_DeveTerValoresCorretos()
        {
            // Arrange: Criando um objeto Produto
            var produto = new Produto
            {
                Id = 1,
                Nome = "Notebook",
                Preco = 3500.99M
            };

            // Act & Assert: Usando FluentAssertions para validar os valores
            produto.Id.Should().Be(1);
            produto.Nome.Should().Be("Notebook");
            produto.Preco.Should().Be(3500.99M);
        }

        [Fact]
        public void Produto_DeveGerarExcecaoParaPrecoInvalido()
        {
            // Arrange
            var produto = new Produto();

            // Act
            Action action = () => produto.DefinirPreco(-10);

            // Assert: Usando FluentAssertions para verificar a exceção
            action.Should().Throw<ArgumentException>()
                .WithMessage("Preço deve ser maior que zero");
        }
    }

    // Classe Produto usada nos testes
    public class Produto
    {
        public int Id { get; set; }
        public string Nome { get; set; }
        public decimal Preco { get; set; }

        public void DefinirPreco(decimal preco)
        {
            if (preco <= 0)
                throw new ArgumentException("Preço deve ser maior que zero");
            Preco = preco;
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Explicação do Código:

Neste exemplo, utilizamos o FluentAssertions em dois testes. No primeiro teste, Produto_DeveTerValoresCorretos, validamos que os valores das propriedades do objeto Produto são os esperados, utilizando métodos como Should().Be(). No segundo teste, Produto_DeveGerarExcecaoParaPrecoInvalido, verificamos se a exceção correta é lançada ao definir um preço inválido, usando Should().Throw() para capturar a exceção e validar sua mensagem.

Conclusão:

O FluentAssertions simplifica a escrita de testes unitários, tornando as asserções mais legíveis e expressivas. Ele oferece uma API poderosa e fluente que melhora a clareza dos testes, tornando-os mais fáceis de entender e manter, especialmente quando há validações complexas ou exceções.

Código fonte: GitHub

Top comments (0)