Por que o código não funciona se o negócio disse "está tudo certo"?
\n\nVocê 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\nNeste 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\nO que é BDD em termos simples?
\n\nBDD (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\nImagine 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
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\nBDD vs TDD: qual a diferença?
\n\nMuitos 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
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\nFerramentas BDD para PHP: escolhendo sua arma
\n\nO ecossistema PHP oferece duas ferramentas principais para desenvolvimento orientado a comportamento: Behat e PHPSpec. Elas resolvem problemas diferentes.
\n\nBehat — o canivete suíço
\n\nBehat é 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\nPHPSpec — o microscópio do desenvolvedor
\n\nPHPSpec é 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\nNeste artigo, vamos focar no Behat, pois ele ilustra melhor o behaviour-driven development em PHP.
\n\nEscrevendo seu primeiro cenário BDD em PHP com Behat
\n\nVamos 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\nPasso 1: Instalação do Behat
\n\ncomposer require --dev behat/behat\n\nEm seguida, inicializamos o projeto:
\n\nvendor/bin/behat --init\n\nA estrutura será assim:
\n\nfeatures/\n bootstrap/\n FeatureContext.php\n discount.feature\n\nPasso 2: Escrevendo o arquivo feature em Gherkin
\n\nCrie o arquivo features/discount.feature:
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