DEV Community

Juarez Júnior for Develop4Us

Posted on • Edited 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

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay