CI com GitHub Actions em projetos Java: Executando testes unitários com Maven passo a passo

🧩 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.

👉 Pipeline no Github

🚀 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 push na branch main
  • 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

CI com GitHub Actions em projetos Java
CI com GitHub Actions em projetos Java

💡 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:


Newsletter / CTA

Vamos evoluir juntos em tecnologia, carreira e disciplina.

Acompanhe novos artigos sobre backend, arquitetura, performance e os aprendizados que também surgem no esporte. Um espaço para compartilhar conhecimento, consistência e evolução ao longo da jornada.