Substituindo FluentAssertions por Shouldly em Projetos .NET

*Este é o segundo artigo da série sobre bibliotecas amplamente utilizadas no ecossistema .NET que deixaram — ou estão deixando — de ser open source. Neste artigo, vamos tratar especificamente da substituição do FluentAssertions pelo Shouldly. Como vimos no artigo anterior, a partir da versão 8, a biblioteca FluentAssertions passou a exigir uma licença paga no valor de US$ 130 por usuário para aplicações de uso comercial. Isso pode representar um obstáculo para muitos desenvolvedores e empresas, especialmente considerando o custo em relação ao que a biblioteca oferece. Apesar de melhorar a legibilidade na escrita de testes unitários, seu uso não envolve nada tão avançado que justifique esse investimento — ainda mais quando existe uma alternativa bastante semelhante e gratuita. Estou falando do Shouldly, que além de oferecer funcionalidades muito próximas às do FluentAssertions, ainda possui a vantagem de exibir mensagens ainda mais claras e informativas quando um teste falha — o que pode fazer bastante diferença no dia a dia do desenvolvimento. Instalando o Shouldly Para começar a usar o Shouldly, instale o pacote NuGet no seu projeto. Você pode fazer isso copiando e colando o seguinte comando no Console do Gerenciador de Pacotes do Visual Studio: Install-Package Shouldly Como alternativa, se você estiver usando o .NET Core, você pode instalar o Shouldly por meio da interface de linha de comando com o seguinte comando: dotnet add package Shouldly Substituindo Asserções: Vamos dar uma olhada em algumas asserções comuns e ver como elas ficam com o Shouldly em comparação ao FluentAssertions: Asserção de Igualdade // FluentAssertions result.Should().Be(10); // Exemplo de mensagem de falha: Expected result to be 10, but found 11 (difference of 1). // Shouldly result.ShouldBe(10); // Exemplo de mensagem de falha: Shouldly.ShouldAssertException : result should be 10 but was 11 Asserção de Strings // FluentAssertions result.Should().NotBeNullOrEmpty(); // Shouldly result.ShouldNotBeNullOrEmpty(); Asserção de Coleções // FluentAssertions result.Should().Contain(item); // Shouldly result.ShouldContain(item); Asserção de Dicionários // FluentAssertions result.Should().ContainKey("Key"); // Shouldly result.ShouldContainKey("Key"); Asserção de Exceções // FluentAssertions Action action = () => calculator.Divide(10, 0); action.Should().Throw(); // Shouldly Should.Throw(() => calculator.Divide(10, 0)); Conclusão A migração do FluentAssertions para um modelo pago levanta uma discussão importante sobre dependências em projetos .NET. Felizmente, o Shouldly surge como uma alternativa sólida, gratuita e de fácil adoção, oferecendo uma experiência semelhante e até superior em alguns aspectos, como nas mensagens de falha. E você, já conhecia o Shouldly? O que achou da comparação? Me conta nos comentários — vamos conversar! Até o próximo artigo! Precisa de apoio para decidir o futuro dos seus projetos — manter, evoluir ou começar do zero? Fale com a gente! Nosso time de especialistas está pronto para ajudar você a enfrentar esses e outros desafios tecnológicos. Referências FluentAssertions Shouldly

Apr 16, 2025 - 14:59
 0
Substituindo FluentAssertions por Shouldly em Projetos .NET

*Este é o segundo artigo da série sobre bibliotecas amplamente utilizadas no ecossistema .NET que deixaram — ou estão deixando — de ser open source. Neste artigo, vamos tratar especificamente da substituição do FluentAssertions pelo Shouldly.

Como vimos no artigo anterior, a partir da versão 8, a biblioteca FluentAssertions passou a exigir uma licença paga no valor de US$ 130 por usuário para aplicações de uso comercial. Isso pode representar um obstáculo para muitos desenvolvedores e empresas, especialmente considerando o custo em relação ao que a biblioteca oferece. Apesar de melhorar a legibilidade na escrita de testes unitários, seu uso não envolve nada tão avançado que justifique esse investimento — ainda mais quando existe uma alternativa bastante semelhante e gratuita.

Estou falando do Shouldly, que além de oferecer funcionalidades muito próximas às do FluentAssertions, ainda possui a vantagem de exibir mensagens ainda mais claras e informativas quando um teste falha — o que pode fazer bastante diferença no dia a dia do desenvolvimento.

Instalando o Shouldly

Para começar a usar o Shouldly, instale o pacote NuGet no seu projeto. Você pode fazer isso copiando e colando o seguinte comando no Console do Gerenciador de Pacotes do Visual Studio:

Install-Package Shouldly

Como alternativa, se você estiver usando o .NET Core, você pode instalar o Shouldly por meio da interface de linha de comando com o seguinte comando:

dotnet add package Shouldly

Substituindo Asserções:

Vamos dar uma olhada em algumas asserções comuns e ver como elas ficam com o Shouldly em comparação ao FluentAssertions:

Asserção de Igualdade

// FluentAssertions
result.Should().Be(10);

// Exemplo de mensagem de falha:
Expected result to be 10, but found 11 (difference of 1).

// Shouldly
result.ShouldBe(10);

// Exemplo de mensagem de falha:
Shouldly.ShouldAssertException : result
    should be
10
    but was
11

Asserção de Strings

// FluentAssertions
result.Should().NotBeNullOrEmpty();

// Shouldly
result.ShouldNotBeNullOrEmpty();

Asserção de Coleções

// FluentAssertions
result.Should().Contain(item);

// Shouldly
result.ShouldContain(item);

Asserção de Dicionários

// FluentAssertions
result.Should().ContainKey("Key");

// Shouldly
result.ShouldContainKey("Key");

Asserção de Exceções

// FluentAssertions
Action action = () => calculator.Divide(10, 0);
action.Should().Throw<DivideByZeroException>();

// Shouldly
Should.Throw<DivideByZeroException>(() => calculator.Divide(10, 0));

Conclusão

A migração do FluentAssertions para um modelo pago levanta uma discussão importante sobre dependências em projetos .NET. Felizmente, o Shouldly surge como uma alternativa sólida, gratuita e de fácil adoção, oferecendo uma experiência semelhante e até superior em alguns aspectos, como nas mensagens de falha.

E você, já conhecia o Shouldly? O que achou da comparação? Me conta nos comentários — vamos conversar!

Até o próximo artigo!

Precisa de apoio para decidir o futuro dos seus projetos — manter, evoluir ou começar do zero? Fale com a gente!
Nosso time de especialistas está pronto para ajudar você a enfrentar esses e outros desafios tecnológicos.

Referências

FluentAssertions

Shouldly