BDD em PHP: Escrevendo código que o negócio entende

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Por que o código não funciona se o negócio disse "está tudo certo"?

\n\n

Você já passou por esta situação: o gerente afirma que a tarefa está resolvida, os testes passam verde, mas o usuário continua insatisfeito? Um clássico. O problema não está no código — está na comunicação. Falamos línguas diferentes: o negócio opera com cenários, enquanto os desenvolvedores lidam com métodos e classes. É aqui que entra o BDD (Behaviour-Driven Development) — desenvolvimento orientado a comportamento. E sim, no PHP isso funciona de forma brilhante.

\n\n

Neste artigo, vamos entender como o BDD em PHP ajuda a transformar "desejos" vagos em testes claros que tanto o gerente quanto o programador compreendem. Você descobrirá como o BDD difere do TDD tradicional, como escrever cenários em Gherkin e quais ferramentas (Behat, PHPSpec) realmente simplificam sua vida.

\n\n

O que é BDD em termos simples?

\n\n

BDD (Behaviour-Driven Development) é uma evolução do TDD. Enquanto o TDD foca em "como testar o código", o BDD responde à pergunta "o que o código deve fazer para que o negócio fique satisfeito".

\n\n

Imagine que você está criando um e-commerce. Em vez de um teste abstrato como "o método applyDiscount() deve reduzir o preço", você escreve um cenário:

\n\n
    \n
  • Dado: um produto de R$ 100,00 no carrinho
  • \n
  • Quando: o usuário insere o cupom "DESC10"
  • \n
  • Então: o valor total do carrinho se torna R$ 90,00
  • \n
\n\n

Este cenário é lido por qualquer pessoa — do profissional de marketing ao líder técnico. Sem mágica, apenas o comportamento do sistema.

\n\n

BDD vs TDD: qual a diferença?

\n\n

Muitos confundem esses conceitos. Vamos esclarecer de uma vez:

\n\n
    \n
  • TDD — escrevemos o teste, depois o código, depois refatoramos. Os testes são escritos por desenvolvedores para desenvolvedores.
  • \n
  • BDD — primeiro escrevemos um cenário de comportamento em linguagem natural, depois o automatizamos. Os cenários são criados em diálogo com o negócio.
  • \n
\n\n

O BDD não substitui o TDD, ele o complementa. Você ainda escreve testes unitários, mas agora possui uma "documentação viva" na forma de cenários.

\n\n

Ferramentas BDD para PHP: escolhendo sua arma

\n\n

O ecossistema PHP oferece duas ferramentas principais para desenvolvimento orientado a comportamento: Behat e PHPSpec. Elas resolvem problemas diferentes.

\n\n

Behat — o canivete suíço

\n\n

Behat é um framework para testes de aceitação. Ele trabalha com a linguagem Gherkin (aquele "Dado-Quando-Então"). Behat é ideal para testes de integração, validação de API, interfaces web e lógica de negócio de alto nível.

\n\n

PHPSpec — o microscópio do desenvolvedor

\n\n

PHPSpec é uma ferramenta para especificação de classes. Ela é mais próxima do TDD, mas com a filosofia do BDD: você descreve o comportamento do objeto, não seus detalhes internos. PHPSpec é excelente para testes unitários de lógica de domínio.

\n\n

Neste artigo, vamos focar no Behat, pois ele ilustra melhor o behaviour-driven development em PHP.

\n\n

Escrevendo seu primeiro cenário BDD em PHP com Behat

\n\n

Vamos criar um exemplo real. Suponha que estamos desenvolvendo um sistema de fidelidade. O cliente recebe 10% de desconto se o valor do pedido ultrapassar R$ 500,00.

\n\n

Passo 1: Instalação do Behat

\n\n
composer require --dev behat/behat
\n\n

Em seguida, inicializamos o projeto:

\n\n
vendor/bin/behat --init
\n\n

A estrutura será assim:

\n\n
features/\n  bootstrap/\n    FeatureContext.php\n  discount.feature
\n\n

Passo 2: Escrevendo o arquivo feature em Gherkin

\n\n

Crie o arquivo features/discount.feature:

\n\n
Feature: Cálculo de desconto para clientes fiéis\n  Como um gerente de vendas\n  Eu quero oferecer 10% de desconto em pedidos acima de R$ 500,00\n  Para incentivar compras de maior valor\n\n  Scenario: Pedido excede o limite de desconto\n    Dado que há produtos no valor de R$ 600,00 no carrinho\n    Quando eu solicito o valor total\n    Então o valor total deve ser                

Blogs

Book Recommendations