Testes de Integração em uma WebAPI utilizando WebApplicationFactory e WireMock

Cristiano José Medeiros Carvalho
#LocalizaLabs
Published in
3 min readJun 12, 2024

Introdução

Testes de integração têm como objetivo verificar se os diferentes componentes de uma aplicação interagem corretamente entre si. Eles garantem que as partes integradas funcionem conforme o esperado, identificando problemas de comunicação, erros de configuração e comportamentos inesperados. Esses testes são essenciais para validar a integração de serviços, APIs externas, bancos de dados e outros sistemas com a sua aplicação. 🚀

Neste modelo, usaremos como atores principais o WebApplicationFactory e WireMock.net.

A classe WebApplicationFactory é usada para criar um servidor de teste em memória e hospedar sua aplicação durante os testes de integração. Este servidor é 100% configurável e permite a personalização de serviços, middlewares e endpoints antes da execução dos testes, podendo assim simular qualquer cenário específico desejado.💪

Já o WireMock.net é usado para simular respostas HTTP em seus testes de integração. Ele permite predefinir respostas para solicitações externas que atendam a critérios específicos.🦾

Referências

Aqui utilizamos Xunit e os seguintes pacotes para criar os testes (porém fique a vontade de usar os pacotes que tiver mais afinidade):

  • FluentAssertions
  • FluentAssertions. Web
  • Microsoft.AspNetCore.Mvc.Testing
  • Microsoft.NET.Test.Sdk
  • WireMock.Net.StandAlone

estes podem ser instalados via nuget package manager no visual studio ou rodando o comando:

📒

Configuração da API

A classe WebApplicationFactory é usada para criar um servidor de teste para hospedar sua aplicação. Ela permite configurar os serviços, middlewares e endpoints antes de executar os testes.

Aqui estarão todas as configurações da sua API, similar ao Program.cs

O Teste 🧪

O exemplo abaixo mostra um teste de integração cujo objetivo é chamar o endpoint “/api/meucontroller/meu-metodo” da API sob teste. Para isso, subimos uma API em memória e criamos o client que vai consumi-la. Com a ajuda do Wiremock, mockamos o que seria uma chamada externa ao endpoint “/apiExterna/endpoint” simulando um retorno 200 com o body Hello World”:

Simples controller de exemplo☝
Similar a um teste de unidade, objetivo e coeso🤏🫰

Ao debugar a execução deste teste, verá que T-O-D-A a sua API estará sob teste, desde middlewares, injeção de dependência, attributes, etc. 🤘

Conclusão

Diferentemente de um teste de unidade em que o foco é uma pequena parte de seu código e todo o restante é mock ou stub, os testes de integração são peça fundamental para aumentar a confiança no código. Com a habilidade de fazer uma verdadeira requisição http, conseguimos testar “de fora pra dentro” nossa API alvo, da mesma forma que uma aplicação (ou usuário) faria.

--

--