Faça validações em C# com FluentValidation e aplique testes unitários facilmente.
Quem nunca se estressou ao pensar em todas as regras necessárias para fazer a validação de seus objetos em C# e como elas serão testadas !
Sempre que criamos uma aplicação, temos modelos que precisam ser validados, existem validações de Contratos, validações de Modelos, validações de negócios, e estas validações além de complexas podem se tornar incompreensíveis se forem mal escritas.
Venho programando há muito tempo, e uma das melhores implementações de validação que aprendi a utilizar é a biblioteca “FluentValidation” que permite que validemos as propriedades dos objetos de forma clara e de fácil compreensão, além de ser fáceis de se testar.
Neste post vou demonstrar como criar uma classe e passar a validar suas propriedades com esta biblioteca, o código foi feito em uma das aulas que ministrei na Etec de Itu.
Para começar, crie seu projeto e abra o Gerenciador de pacotes Nuget para adicioná-lo, caso esteja utilizando o VsCode, digite a linha de comando: dotnet add package FluentValidation.AspNetCore
Adicionado ao seu projeto, você irá validar seus objetos com a construção de um objeto validator !
Vamos então tomar por base uma classe simples:
Agora vamos construir o validator dele:
Notem que o objeto Herda da classe “AbstractValidator” que pertence ao FluentValidation já (temos que colocar o using).
Ops, e o que seriam “ContatoModelErrorMessages” ? Criei uma classe para armazenar as mensagens de erro, assim ficam todas concentradas num único lugar (vamos tentar usar Clean Code nos códigos).
Beleza, feito isso, agora precisamos testar esse validador, para isto faremos um Teste de Unidade !
Para isto, criaremos um novo projeto, do tipo “XUnit”
Neste projeto iremos realizar a referência para o projeto anterior, onde estão definidos nossos objetos.
E na janela que se abrir, marque o projeto anterior para que possamos ter acesso às classes e objetos do validador.
Agora neste projeto iremos criar uma nova classe, que iremos chamar de “ContatoModelBuilder”, esta classe terá como objetivo instanciar um objeto da nossa Classe “Contato” com dados fixados de forma que esta instância passe por uma validação como uma classe válida.
Desta forma utilizaremos o Builder toda vez que quisermos instanciar um objeto “Ideal”.
O próximo passo será criar uma nova classe, para que façamos os testes de unidade, vamos dar o nome à ela como “ContatoUnitTest.cs”.
Até aí está tudo fácil, é só clicar com o botão direito no nosso teste e no menu escolher “run tests”
Aí caso o teste seja executado com sucesso, na janela de visualização dos testes, verá que ele aparecerá em “verde” indicando o sucesso.
Pronto, agora é só escrever um teste para cada caso, com situações que testem sucessos e insucessos das regras para que possamos garantir a confiabilidade da solução.
Onde teremos validações do tipo “Fact” onde testamos apenas uma situação, ou testes de “Theory” onde múltiplos valores podem ser testados.
Pronto, caso queira saber mais sobre testes, há inúmeros artigos sobre testes, assim como um exemplo da palestra que fiz no 1º Meetup Itu Developers (link) onde você poderá aprofundar-se neste tema e ver os exemplos da palestra no Github (link).
Mas e o uso dentro da aplicação? como vai ficar ?
E só realizar a validação como feito nos testes, e usar da forma que ficar melhor dentro da sua realidade, abaixo segue o exemplo dentro da inclusão:
O intuito deste artigo era demonstrar de forma fácil o uso de Fluent Validation com C#, existem muitas outras formas de utilizálo, e você pode encontrar mais no próprio site da biblioteca (link).
Gostou do artigo? clique no ícone👏e me siga para ver as próximas publicações !! Quer ver mais conteúdos, acesse minhas redes através do Linktree: https://linktree.com/nizzola
Quer ver mais sobre testes unitários?
Tenho um post sobre como criar os testes unitários utilizando o ChatGpt
Escrevendo validação e testes unitários em .NET usando o ChatGPT | by Marcio Nizzola | Medium