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
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;
}
}
}
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)