🚀 7.2 Testes Unitários: Precisão e Velocidade

Os Testes Unitários são a fundação do nosso Escudo de Engenharia. Eles validam a menor unidade possível de código (geralmente uma classe ou método) em isolamento total, garantindo que a lógica fundamental do Green Dog esteja correta.

O Kit de Elite

No Spring Boot 3.5, utilizamos as melhores ferramentas do ecossistema:

  1. JUnit 5 (Jupiter): O motor de execução moderno.
  2. AssertJ: Para asserções fluidas e legíveis.
  3. Mockito: Para isolar a unidade, substituindo dependências reais por mocks (objetos simulados).

Exemplo: Testando Regras de Negócio

Vamos testar uma lógica simples de cálculo ou validação em nossa entidade Pedido.

import static org.assertj.core.api.Assertions.assertThat;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
 
class PedidoTest {
 
    @Test
    @DisplayName("Deve calcular o valor total corretamente com um item")
    void deveCalcularValorTotal() {
        // Arrange (Preparação)
        Item dog = Item.builder().nome("Tradicional").preco(25.0).build();
        Pedido pedido = Pedido.builder()
                .itens(Arrays.asList(dog))
                .build();
 
        // Act (Ação)
        Double total = pedido.getItens().stream()
                             .mapToDouble(Item::getPreco).sum();
 
        // Assert (Verificação com AssertJ)
        assertThat(total).isEqualTo(25.0);
    }
}

Benefícios do Isolamento

graph TD
    Test[Teste Unitário]
    subgraph isolamento [Isolamento]
        Class[Classe Sob Teste]
        Mock1[Mock Repositório]
        Mock2[Mock Serviço]
    end
    Test --> Class
Class -.-> Mock1
Class -.-> Mock2
> [!TIP]
> 
> **Velocidade é Chave:** Um teste unitário deve rodar em milissegundos. Se seu teste demora segundos ou precisa de um banco de dados, ele não é um teste unitário, mas um teste de integração.

Com a lógica atômica validada, vamos subir um degrau e testar como nossos componentes conversam entre si.

---
[[Informática para Internet/Sistemas Web II/capitulo_049|⬅️ Capítulo Anterior]] | [[Informática para Internet/Sistemas Web II/capitulo_051|Próximo Capítulo ➡️]]