Testes são a base de um software confiável. Quando bem aplicados, reduzem bugs, aumentam a velocidade de entrega e dão confiança para refatorar. Dois paradigmas populares são Test-Driven Development (TDD) e Behavior-Driven Development (BDD). Embora complementares, eles têm focos diferentes.
Quando usar TDD vs BDD
- TDD: foco em unidades de código (funções, classes). Escreve-se o teste antes da implementação, garantindo que a API pública se comporte como esperado.
- BDD: foco em comportamento de alto nível (fluxos de usuário, requisitos). Usa uma linguagem quase natural (Gherkin) para descrever cenários.
Regra prática: use TDD para lógica de negócio e bibliotecas internas; use BDD para fluxos de UI e integrações.
Ferramentas recomendadas
| Camada | Ferramenta | Por que usar |
|---|---|---|
| Unitário (JS/TS) | Jest | Rápido, snapshot testing, cobertura integrada |
| Unitário (Node) | Mocha + Chai | Flexível, boa integração com Sinon |
| UI (React) | Testing Library | Testa a UI como o usuário vê |
| End-to-end | Cypress | Testes reais no navegador, depuração visual |
| BDD | Cucumber.js | Sintaxe Gherkin, integração com Jest/Cypress |
Fluxo TDD passo a passo
- Escreva o teste que falha (vermelho).
- Implemente o código mínimo para passar (verde).
- Refatore mantendo os testes verdes (refatorar).
- Repita.
Exemplo prático, Função de formatação de preço
// priceFormatter.test.ts (Jest) import { formatPrice } from './priceFormatter'; test('formata número como moeda BRL', () => { expect(formatPrice(1234.5)).toBe('R$ 1.234,50'); });
// priceFormatter.ts (implementação mínima) export function formatPrice(value: number): string { return new Intl.NumberFormat('pt-BR', { style: 'currency', currency: 'BRL' }).format(value); }
Fluxo BDD com Cucumber.js
Definição de cenário (Gherkin)
Feature: Cadastro de Usuário As a visitor I want to create an account So that I can access protected features Scenario: Cadastro bem-sucedido Given I am on the registration page When I fill the form with valid data And I submit the form Then I should see a confirmation message And I receive a verification email
Implementação dos passos (Cypress + Cucumber)
import { Given, When, Then } from 'cypress-cucumber-preprocessor/steps'; Given('I am on the registration page', () => { cy.visit('/register'); }); When('I fill the form with valid data', () => { cy.get('#email').type('usuario@example.com'); cy.get('#password').type('SenhaForte123!'); cy.get('#confirmPassword').type('SenhaForte123!'); }); When('I submit the form', () => { cy.get('form').submit(); }); Then('I should see a confirmation message', () => { cy.contains('Cadastro concluído').should('be.visible'); });
Boas práticas gerais
- Mantenha os testes rápidos: se um teste leva mais de 500 ms, provavelmente está fazendo I/O desnecessário.
- Isolamento: use mocks/stubs para dependências externas (APIs, bancos).
- Cobertura mínima: 80 % de cobertura de linhas é um bom ponto de partida, mas priorize lógica crítica.
- Integração contínua: configure o pipeline (GitHub Actions, GitLab CI) para rodar
npm testem cada PR. - Feedback visual: use plugins de IDE que mostram resultados de testes em tempo real.
Checklist de implementação
- Escolher framework de teste (Jest, Cypress, etc.)
- Configurar
jest.config.jsecypress.json - Criar diretórios
tests/unitetests/e2e - Escrever primeiro teste falho para cada nova feature
- Integrar testes ao pipeline CI
- Monitorar cobertura e falhas regressivas
Conclusão
TDD e BDD não são apenas técnicas, são mudanças de mentalidade. Quando adotadas corretamente, garantem que seu código evolua sem medo de quebrar funcionalidades existentes. Comece pequeno, escreva testes claros e deixe que eles guiem seu desenvolvimento.
Qual a sua experiência com TDD ou BDD? Compartilhe nos comentários!
Leia também
- Testes automatizados: por que código sem teste é dívida
- Arquitetura de testes automatizados: um guia rápido para times que precisam de velocidade
- Arquitetura de testes automatizados: os passos essenciais para montar do zero
- Ciclo de testes de software: tendências e um guia rápido para líderes
- Testes Automatizados: Arquitetura e Fundamentos
- Testes De Estresse - Modelos De Negocio Na Pratica
