📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Módulo 11: Qualidade e Testes de Software. Recomendado revisar antes de começar.

🧪 Suíte Completa de Testes Automatizados & TDD

v1.0 — Test-Driven Development (TDD), JUnit 5, Mockito, AssertJ e Cobertura JaCoCo

Trilha de Especialização Pedagógica — Projeto 1 de 4

🎓 Nível Profissional Simulado: QA Engineer / Desenvolvedor Backend Júnior. Desenvolvedores de elite não testam software clicando na tela: eles escrevem testes automatizados antes mesmo de escrever o código de produção (TDD). Aqui você aprende o ciclo Red ➔ Green ➔ Refactor, uso de mocks e análise de cobertura de código com JaCoCo.

—`

🎯 Objetivo & Escopo do Projeto

Construir uma suíte profissional de Testes Unitários Automatizados com TDD para um motor de cálculo de juros e descontos comerciais, utilizando JUnit 5, dublês de teste com Mockito, asserções fluentes com AssertJ e validação de cobertura de código de 95% via JaCoCo.

—`

🧑‍💼 Fase 1 — Levantamento de Requisitos

O Briefing do Cliente (Gerente de Qualidade & QA Lead)

“Nosso motor de cálculo financeiro calcula juros de mora e descontos por pontualidade. Tivemos um prejuízo de R$ 80.000 mês passado porque alguém alterou uma regra de desconto e ninguém percebeu. Exigimos uma suíte TDD completa: testes unitários cobrindo todos os cenários de borda (valores negativos, parcelas zeradas, datas inválidas), mocks para o serviço de cotação de câmbio e relatório JaCoCo com no mínimo 90% de cobertura de código.”

Requisitos Funcionais (RF) e Não-Funcionais (RNF)

ID Tipo Descrição Origem no Briefing
RF01 Funcional Calcular juros simples e compostos para pagamentos em atraso. “juros de mora”
RF02 Funcional Aplicar desconto progressivo por antecipação de parcelas. “descontos por pontualidade”
RF03 Funcional Lançar exceções customizadas para entradas inválidas (valores zerados ou negativos). “cenários de borda”
RNF01 Não-Funcional Cobertura mínima de 90% de linhas e ramos aferida pelo plugin JaCoCo. “relatório JaCoCo 90%”
RNF02 Não-Funcional Execução determinística e isolada em sub-segundos via JUnit 5. Automação de CI

—`

📋 Fase 2 — Backlog & User Stories

ID User Story Prioridade
US01 Como analista financeiro, quero ter a garantia de que o cálculo de juros segue rigorosamente a fórmula contábil. Alta
US02 Como time de engenharia, quero que o build quebre no Maven se a cobertura cair abaixo de 90%. Alta

—`

🌿 Fase 3 — Engenharia em Equipe (Ciclo TDD no Terminal)

# 1. Criar branch da feature
git checkout -b feature/US01-tdd-calculo-juros

# 2. Executar suíte de testes unitários com relatório de cobertura
mvn clean test jacoco:report

—`

🛠️ Fase 4 — Implementação Guiada do Teste TDD (src/test/.../CalculadoraFinanceiraTest.java)

@Test
@DisplayName("Deve calcular juros de mora de 2% corretamente em pagamentos atrasados")
void deveCalcularJurosDeMoraCorretamente() {
    // Arrange (Dado)
    CalculadoraFinanceira calc = new CalculadoraFinanceira();
    BigDecimal valorOriginal = new BigDecimal("1000.00");

    // Act (Quando)
    BigDecimal totalComJuros = calc.aplicarJuros(valorOriginal, 5); // 5 dias atraso

    // Assert (Entao)
    assertThat(totalComJuros).isEqualByComparingTo(new BigDecimal("1020.00"));
}

—`

🚀 Como Executar no Laboratório

1. Abra o terminal na pasta deste projeto

No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:

cd testes_01_suite_tdd_jacoco

2. Execute a aplicação ou testes

./mvnw test
# ou k6 run load_test.js

[!TIP] Dica para execução a partir da raiz do repositório: Se você abriu o repositório completo no VS Code, basta navegar até a pasta antes de executar: cd proj_aplicacoes_full_stack/projetos/testes_01_suite_tdd_jacoco`

🧭 Decisões de Arquitetura (ADRs)

—`

🧪 Testes de Validação & Relatório JaCoCo

—`

✅ Checkpoint Final

  1. Ciclo Red-Green-Refactor documentado.
  2. Relatório HTML do JaCoCo gerado em target/site/jacoco/index.html.

⬅️ Ver Todos os Projetos no Super-Hub 🏠 Página Inicial do Portal