Integration testing
Testes de integração
Em comparação com testes unitários, os testes de integração são muito maiores em escopo e exercitam toda a pilha da aplicação. Em vez de isolar uma classe ou método, os testes de integração asseguram que todos os componentes do seu aplicativo estejam funcionando adequadamente: roteamento, controllers, services, banco de dados e assim por diante.
Os testes de integração são mais lentos e envolve mais do que os testes unitários, portanto, é comum que um projeto tenha muitos testes unitários pequenos, mas apenas um projeto de teste de integração.
Para testar a pilha inteira (incluindo o roteamento dos controllers), os testes de integração geralmente fazem chamadas HTTP para a aplicação da mesma forma que um navegador Web faria.
Para escrever testes de integração que fazem solicitações HTTP, você pode iniciar manualmente sua aplicação e testes ao mesmo tempo e escrever seus testes para fazer requisições para http://localhost:5000
. No entanto, o ASP.NET Core oferece uma maneira mais agradável de hospedar sua aplicação para testes: a classe TestServer
. TestServer
pode hospedar sua aplicação pela duração do teste e interrompê-la automaticamente quando o teste for concluído.
Criando um projeto de testes de integração
Se você está atualmente no diretório do seu projeto, o comando cd
sobe um nível para o diretório rootAspNetCoreTodo
. Utilize este comando para criar um novo projeto de teste:
Sua estrutura de diretórios deve estar assim:
Se preferir, você pode manter seus testes unitários e de integração no mesmo projeto. Para projetos grandes, é comum dividi-los, pois isso permite facilmente executá-los separadamente.
Como o projeto de teste usará as classes definidas em seu projeto principal, você precisará adicionar uma referência ao projeto principal:
Você também precisará adicionar o pacote NuGet Microsoft.AspNetCore.TestHost
:
Exclua o arquivo UnitTest1.cs
criado por dotnet new
. Você está pronto para escrever um teste de integração.
Escrevendo um teste de integração
Existem algumas coisas que precisam ser configuradas no servidor de teste antes de cada teste. Em vez de sobrecarregar o teste com este código de configuração, você pode manter essa configuração em uma classe separada. Crie uma nova classe chamada TestFixture
:
AspNetCoreTodo.IntegrationTests/TestFixture.cs
Esta classe cuida da criação de um TestServer
e ajudará a manter os testes limpos e ordenados.
Agora você está (finalmente) pronto para escrever um teste de integração. Crie uma nova classe chamada TodoRouteShould
:
AspNetCoreTodo.IntegrationTests/TodoRouteShould.cs
Esse teste faz uma requisição anônima (sem login) à rota /todo
e verifica se o navegador é redirecionado para a página de login.
Esse cenário é um bom candidato para um teste de integração, porque envolve vários componentes da aplicação: o sistema de roteamento, o controller, o fato de o controller estar marcado com [Authorize]
e assim por diante. Também é um bom teste, pois garante que você nunca removerá acidentalmente o atributo [Authorize]
e tornará a visão dos to-do items acessível a todos.
Executando o teste
Execute o teste no terminal com o comando dotnet test
. Se tudo estiver funcionando corretamente, você verá uma mensagem de sucesso:
Finalizando
Testes é um tópico amplo e há muito mais a aprender. Este capítulo não aborda testes de interface do usuário (UI testing) ou testes de frontend (JavaScript), que provavelmente merecem livros inteiros próprios. Você deve, no entanto, ter as habilidades e os conhecimentos básicos necessários para aprender mais sobre testes e para praticar escrita de testes para suas próprias aplicações.
Last updated
Was this helpful?