🧩 Introdução
Automatizar testes é um dos pilares de qualidade em sistemas modernos. Em projetos Java com Spring Boot, garantir que os testes unitários sejam executados a cada alteração é essencial para manter a confiabilidade da aplicação.
Neste artigo, vamos configurar um pipeline simples de CI (Continuous Integration) utilizando GitHub Actions, focado na execução de testes unitários com Maven.
Vamos usar como exemplo um projeto baseado em Domain Driven Design (DDD) com Java 21 e MapStruct.
🚀 O que é GitHub Actions?
O GitHub Actions é uma ferramenta nativa do GitHub que permite automatizar fluxos de trabalho diretamente no repositório.
Com ele, você pode:
- Executar testes automaticamente
- Fazer build da aplicação
- Publicar artefatos
- Integrar com outras ferramentas
Tudo isso a cada push ou pull request.
🏗️ Estrutura do projeto
Nosso projeto está organizado da seguinte forma:
website-projects/
└─ ddd-java-spring-dto-model-entity/
├─ pom.xml
└─ src/
⚙️ Criando o GitHub Actions
Para configurar o pipeline, criamos o seguinte arquivo:
.github/workflows/java-tests.yml
📄 YAML do GitHub Actions
name: Java Unit Tests
on:
push:
branches: [ "main" ]
paths:
- "ddd-java-spring-dto-model-entity/**"
- ".github/workflows/java-tests.yml"
pull_request:
branches: [ "main" ]
paths:
- "ddd-java-spring-dto-model-entity/**"
- ".github/workflows/java-tests.yml"
jobs:
test:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ddd-java-spring-dto-model-entity
steps:
- name: Checkout do código
uses: actions/checkout@v4
- name: Configurar Java 21
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: '21'
cache: maven
- name: Executar testes unitários
run: mvn -B test
🔍 Explicando o workflow
🔹 name
name: Java Unit Tests
Define o nome do pipeline exibido no GitHub.
🔹 on (gatilhos)
on:
push:
pull_request:
O workflow será executado quando:
- houver
pushna branchmain - houver
pull request
🔹 paths (otimização importante)
paths:
- "ddd-java-spring-dto-model-entity/**"
👉 Executa o pipeline apenas quando há mudanças no projeto, evitando execuções desnecessárias.
🔹 jobs
jobs:
test:
runs-on: ubuntu-latest
Define o job que será executado em uma máquina Linux.
🔹 working-directory (ponto chave do artigo)
defaults:
run:
working-directory: ddd-java-spring-dto-model-entity
👉 Aqui está o diferencial:
Como o projeto está dentro de uma subpasta do repositório, definimos o diretório padrão para execução dos comandos.
Sem isso, o Maven não encontraria o pom.xml.
🔹 checkout
- uses: actions/checkout@v4
Faz o clone do repositório na máquina do runner.
🔹 setup Java
- uses: actions/setup-java@v5
Configura:
- Java 21
- Cache de dependências Maven
👉 Isso reduz drasticamente o tempo de build.
🔹 execução dos testes
run: mvn -B test
Executa os testes unitários.
-B→ modo batch (ideal para CI)
🔄 Fluxo do pipeline
💡 Boas práticas
- ✔️ Use cache de dependências (já aplicado)
- ✔️ Limite execução com
paths - ✔️ Use Java version fixa (ex: 21)
- ✔️ Mantenha pipeline simples no início
🔥 Evoluções possíveis
Você pode evoluir esse pipeline para:
- 📊 cobertura com JaCoCo
- 🧪 testes de integração
- 🐳 build com Docker
- 🚀 deploy automático
🔗 Projeto de exemplo
👉 https://github.com/isacaguiar/website-projects/tree/main/ddd-java-spring-dto-model-entity
👉 https://github.com/isacaguiar/website-projects/actions/workflows/ddd-tests.yml
🧠 Conclusão
Com poucos passos, conseguimos criar um pipeline eficiente de CI para projetos Java.
Essa abordagem:
- aumenta a qualidade do código
- reduz erros em produção
- profissionaliza seu repositório
E o melhor: tudo integrado diretamente ao GitHub.
Share this content:
