Testes de Software com .NET 5: exemplos de utilização

Renato Groffe
4 min readDec 28, 2020

--

Este artigo traz diversos exemplos de implementação de testes envolvendo aplicações baseadas no .NET 5. Já disponibilizei inclusive no meu GitHub repositórios demonstrando a utilização de xUnit, MS Test, NUnit, Moq, NSubstitute, Fluent Assertions e SpecFlow listados aqui. A automação de testes com GitHub Actions e Azure DevOps também foi contemplada neste artigo.

E aproveito este espaço em que estamos discutindo a implementação de testes para um convite…

No dia 18/01/2021 (segunda) às 21:00 — horário de Brasília — teremos mais um evento online e gratuito no Canal .NET, retomando o tema automação de testes com Azure DevOps e GitHub Actions.

Ao longo da live será abordado o uso de tecnologias como .NET 5, ASP.NET Core, Docker, Kubernetes, JMeter, xUnit, SpecFlow, Selenium, Visual Studio, Slack, Azure Functions e outros serviços do Microsoft Azure.

Para participar faça sua inscrição no link a seguir, a transmissão acontecerá via YouTube (em um link a ser divulgado em breve):

Testes de Unidade

Os 3 exemplos a seguir demonstram a implementação de testes de unidade com os frameworks xUnit, NUnit e MSTest:

.NET 5 + Unit Testing + xUnit + Conversão de Temperaturas

.NET 5 + Unit Testing + NUnit + Conversão de Temperaturas

.NET 5 + Unit Testing + MSTest + Conversão de Temperaturas

Todos estes repositórios mostraram diferentes formas de implementar testes de unidade de para uma mesma estrutura: um método que converte temperaturas em Fahrenheit para o equivalente na escala Celsius.

Para implementações com xUnit podemos nos valer dos atributos Theory e InlineData para a codificação de testes parametrizados:

Funcionalidades do Visual Studio 2019 como Live Unit Testing também são compatíveis com o .NET 5, como indicado na imagem seguinte:

Implementações equivalentes com NUnit empregarão o atributo TestCase:

Já com o MS Test utilizaremos os atributos DataTestMethod e DataRow para chegar a uma codificação similar aos 2 exemplos anteriores:

Testes constituem um assunto recorrente em apresentações e conteúdos que produzo gratuitamente, sendo que numa das lives da qual participei no Canal .NET apresentei exemplos envolvendo .NET, o Visual Studio 2019 e diversas das alternativas mencionadas neste post:

Mock Objects

Mocks permitem simular o comportamento de objetos em diferentes cenários, evitando que Desenvolvedores criem implementações que certamente seriam descartadas/desativadas num ambiente de produção. Na plataforma .NET 2 temos alternativas bastante populares para a codificação de estruturas deste tipo: os frameworks Moq e NSubstitute.

No meu GitHub disponibilizei 2 repositórios com exemplos de utilização do Moq e do NSubstitute:

.NET 5 + xUnit + Moq + Fluent Assertions

.NET 5 + xUnit + NSubstitute + Fluent Assertions

Na listagem a seguir temos o exemplo de criação de um Mock Object para a interface IServicoConsultaCredito, com a utilização do Moq em conjunto com xUnit e Fluent Assertions (este último possibilita até mesmo a definição de mensagens customizadas para falhas na execução de testes):

Já a próxima listagem traz um exemplo similar baseado no uso do NSubstitute. Este framework contribui para a obtenção de um código menos verboso, porém temos mais opções em termos de configuração na criação de Mocks ao optarmos pelo Moq:

SpecFlow, GitHub Actions e Azure DevOps…

O SpecFlow é uma alternativa open source muito útil quando optamos por abordagens como BDD (Behavior Driven Development), possibilitando a execução de testes de validação de funcionalidades de um projeto através de user stories.

No meu GitHub há 2 repositórios em que demonstro o uso deste framework:

ASP.NET Core 5 + REST API + xUnit + SpecFlow + Swagger + Dockerfile + Juros Compostos

ASP.NET Core 5 + REST API + Application Insights + SpecFlow + xUnit + Dockerfile + Conversor Temperaturas

A listagem a seguir traz a user story definida no primeiro repositório:

Já na próxima listagem está a classe gerada com o template Step Definition, mapeando as sentenças da user story para código C#:

Quanto à automação do build, testes e deployment de aplicações baseadas em .NET 5, no vídeo a seguir (apresentação realizada durante o Canal .NET DevWeek 2020) demonstro algumas possibilidades empregando Azure DevOps e GitHub Actions:

E termino este post com um convite…

Que tal participar do treinamento online pioneiro no Brasil sobre GitHub Actions e promovido pelo Azure na Prática, agora com aulas gravadas e uma primeira sessão ao vivo com resolução de dúvidas durante o dia 23/01/2021 (sábado)?

Acompanhe com comodidade e a qualquer tempo os diversos módulos deste treinamento, em que serão cobertas boas práticas + estratégias de build/testes/deployment e o uso desta solução de automação com tecnologias como Docker, Kubernetes, Azure App Service, Azure Functions e outros serviços da nuvem Microsoft!

Acesse então o link a seguir para efetuar sua inscrição com um desconto especial de R$ 100,00 (inclui certificado e grupo para resolução de dúvidas durante e após o curso):

https://bit.ly/anp-githubactions-desc-100-blog-groffe

--

--

Renato Groffe

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker