Este documento descreve como configurar e usar testes automatizados antes de commits e pushes.
Git hooks são scripts que são executados automaticamente em determinados eventos do Git (commit, push, etc.).
1. Configurar o diretório de hooks customizado:
# No Windows (PowerShell)
git config core.hooksPath .githooks
# No Linux/Mac
chmod +x .githooks/pre-push
git config core.hooksPath .githooks2. Pronto! Agora, toda vez que você fizer git push, os testes serão executados automaticamente.
- Antes de cada push, o hook
.githooks/pre-pushé executado - Se os testes passarem (exit code 0), o push continua
- Se os testes falharem (exit code != 0), o push é bloqueado
# Pular o hook em um push específico
git push --no-verify- Docker Desktop instalado
- Docker Compose
Opção 1: Script automatizado (Windows)
.\scripts\test-docker.batOpção 2: Comando direto
docker-compose -f docker-compose.test.yml up --build --abort-on-container-exit
# Limpar depois
docker-compose -f docker-compose.test.yml down -v✅ Ambiente isolado e limpo
✅ PostgreSQL real para testes de integração
✅ Mesmos resultados em qualquer máquina
✅ Simula CI/CD localmente
Windows:
.\scripts\validate.batLinux/Mac:
chmod +x scripts/validate.sh
./scripts/validate.sh- ✅ Restore de pacotes
- ✅ Build da solução
- ✅ Execução de todos os testes
⚠️ Formatação de código (warning apenas)
name: CI
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main, develop ]
jobs:
test:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:16-alpine
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: PrismaPrimeMarketDB_Test
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
ports:
- 5432:5432
steps:
- uses: actions/checkout@v3
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: 8.0.x
- name: Restore dependencies
run: dotnet restore
- name: Build
run: dotnet build --no-restore
- name: Test
run: dotnet test --no-build --verbosity normal
env:
ConnectionStrings__DefaultConnection: "Host=localhost;Port=5432;Database=PrismaPrimeMarketDB_Test;Username=postgres;Password=postgres"graph LR
A[Código] --> B[Testes Locais]
B --> C{Passou?}
C -->|Sim| D[Git Add]
C -->|Não| A
D --> E[Git Commit]
E --> F[Git Push]
F --> G[Pre-push Hook]
G --> H{Passou?}
H -->|Sim| I[Push para Remoto]
H -->|Não| A
# 1. Desenvolvimento
# ... fazer alterações no código ...
# 2. Validar localmente (opcional mas recomendado)
./scripts/validate.bat
# 3. Commit
git add .
git commit -m "feat: Nova funcionalidade"
# 4. Push (testes rodam automaticamente)
git push origin main1. Configurar Git Hooks
git config core.hooksPath .githooks2. Testar a configuração
.\scripts\validate.bat3. Fazer um push de teste
git push
# Os testes rodarão automaticamente!Edite .githooks/pre-push.bat para adicionar validações customizadas:
REM Adicionar lint
dotnet format --verify-no-changes
if %ERRORLEVEL% neq 0 exit /b 1
REM Adicionar análise de segurança
dotnet list package --vulnerablePara não esperar testes de integração durante o push:
# .githooks/pre-push.bat
dotnet test --filter "Category!=Integration"dotnet test --logger "html;logfilename=testresults.html"dotnet test --collect:"XPlat Code Coverage"# Verificar configuração
git config core.hooksPath
# Deve retornar: .githooks
# Reconfigurar se necessário
git config core.hooksPath .githooks# Verificar se o serviço está rodando
docker ps
# Verificar logs
docker-compose -f docker-compose.test.yml logs postgres- Verificar variáveis de ambiente
- Verificar connection strings
- Verificar permissões de arquivo
- Git Hooks Documentation
- Docker Compose Documentation
- xUnit Documentation
- GitHub Actions Documentation
- ✅ Execute
./scripts/validate.batantes de fazer commit - ✅ Use
--no-verifyapenas em emergências - ✅ Mantenha os testes rápidos (< 30 segundos)
- ✅ Use Docker para garantir consistência
- ✅ Configure CI/CD no GitHub/GitLab
Última atualização: Janeiro 2026