Pequena API de ToDo List para PoC de setup de testes de integração utilizando xUnit
Para entender melhor como controlar o ciclo de criação, população e limpeza das tabelas do banco de dados nos testes de integração utilizando xUnit, criei essa PoC para testar alguns possíveis arranjos no Setup da aplicação e verificar qual a melhor maneira de fazer o ciclo de limpeza entre os testes e o Dispose dos recursos no final dos testes. Neste caso utilizei o recurso IClassFixture do xUnit
- .Net 5
- Docker
- Docker Compose
- xUnit
- AutoBogus
- EF Core 5
- Respawn
- Npgsql
Para executar esta aplicação é necessário ter um container com o banco de dados PostgreSQL rodando na máquina com as tabelas que serão utilizadas pela aplicação. Para preparar a infraestrura para rodar a aplicação e os testes siga as instruções a abaixo.
Para subir essa infraestrutura há um docker-compose na raiz do projeto que baixa e roda o container. Para executá-lo, utilize o seguinte comando na raiz do projeto
docker-compose up -d
e ao final do execução teremos dois containeres em execução, o banco de dados e uma aplicação para gereneciamento do postgres
⠿ Network todoapp_postgres-network Created
⠿ Container postgres-db Started
⠿ Container pgadmin Started
Antes de executar a aplicação é necessário executar as migrations para que as tabelas utilizadas na aplicação estejam prontas no PostgreSQL. Para isso é necessário ter a ferramenta do dotnet para executar comandos do EF Core. Caso já tenha a ferramenta instalada é só pular para o passo de execução das migrations. Para instalar a ferramenta utilize o seguinte comando:
dotnet tool install --global dotnet-ef
ou
dotnet tool restore
Com a ferramenta instalada, execute o seguinte comando na raiz do projeto para executar as migrations:
dotnet ef database update --project ./src/ToDoApp.csproj
Para acessar os dados com o PgAdmin, certifique-se que os containeres estão sendo executados com o seguinte comando:
docker ps
Este comando deve mostrar os containeres em uma lista semelhante a seguinte:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4ac545d8bca0 dpage/pgadmin4 "/entrypoint.sh" 5 minutes ago Up 5 minutes 443/tcp, 0.0.0.0:8081->80/tcp, :::8081->80/tcp pgadmin
94783c9da757 postgres "docker-entrypoint.s…" 5 minutes ago Up 5 minutes 0.0.0.0:5432->5432/tcp, :::5432->5432/tcp postgres-db
Configurando PgAdmin
-
Para acessar o PgAdmin utilize um browser e acesse o endereço
http://localhost:8081
. Para fazer o login no gerenciador, utilizaremos o usuário e senha (admin@email.com
e123
) configurados nodocker-compose.yml
que utilizados para subir os containers. -
Ao acessar o PgAdmin temos que adicionar o servidor onde está o banco de dados, que no nosso caso é o container que criamos. No meu de Quick Links clique em Add New Server e na tela que irá abrir preencha seguindo as próximas instruções.
-
Na guia General o campo Name identifica o banco de dados. Sugiro utilizar postgres-docker
-
Na guia Connection preencha os campos assim:
- Host name/address ->
postgres-db
- Maintenance database ->
ToDoApp
- Username ->
admin
- Password ->
123
- Host name/address ->
-
Clique em Save para ter acesso ao banco de dados
Para executar os testes do projeto é importante que o container com o banco de dados esteja em execução. Utilize o seguinte comando para executar os testes
dotnet test