BDD em C#: quando os testes falam a linguagem do negócio
\n\nImagine: você é um desenvolvedor C#. Um product owner chega até você e diz: "Faça com que, após o pagamento do pedido, o usuário receba um e-mail, mas apenas se o valor for maior que 1000 reais". Você acena, vai para o código, escreve a lógica, cobre com testes unitários. Uma semana depois, você mostra o resultado. O PO olha, franze a testa e diz: "Eu quis dizer outra coisa".
\n\nFamiliar? Este é o problema clássico da lacuna entre o negócio e o desenvolvimento. E é exatamente isso que o BDD em C# resolve — Behaviour-Driven Development, ou desenvolvimento orientado a comportamento.
\n\nNeste artigo, vamos explorar o que é BDD, como ele difere do TDD e, principalmente, como implementar BDD em um projeto C# com SpecFlow e xUnit. Você verá exemplos reais de código, aprenderá a escrever cenários em Gherkin e os transformará em testes automatizados. Vamos lá!
\n\nO que é BDD e por que ele é necessário?
\n\nBDD (Behaviour-Driven Development) é uma metodologia de desenvolvimento onde os requisitos do sistema são descritos através do comportamento do usuário. Em vez de especificações técnicas áridas, você escreve cenários em linguagem natural que tanto o negócio quanto o desenvolvedor entendem.
\n\nA ideia central do BDD: "Não verifique se o código funciona. Verifique se o sistema se comporta como o negócio espera".
\n\nAo contrário do TDD (Test-Driven Development), onde você primeiro escreve um teste unitário e depois o código, o BDD foca em cenários de uso. Testes BDD não são uma verificação de método ou classe, mas sim a verificação de um cenário de usuário completo.
\n\nOs três pilares do BDD
\n- \n
- Linguagem única — todos os participantes do projeto (PO, analista, testador, desenvolvedor) falam a mesma língua. Geralmente, é o Gherkin. \n
- Cenários — cada funcionalidade é descrita através de Given-When-Then (Dado-Quando-Então). \n
- Automação — os cenários são transformados em testes automatizados que são executados como parte do CI/CD. \n
Agora, vamos ver como isso se parece no código C#.
\n\nFerramentas para BDD em C#
\n\nPara implementar BDD no ecossistema .NET, existem duas ferramentas principais:
\n\n- \n
- SpecFlow — o framework BDD mais popular para C#. Ele analisa cenários Gherkin e os vincula ao código. \n
- xUnit / NUnit / MSTest — executores de teste que rodam os testes BDD. \n
Usaremos SpecFlow + xUnit. A instalação é simples — via NuGet:
\n\ndotnet add package SpecFlow\ndotnet add package SpecFlow.xUnit\ndotnet add package xunit\ndotnet add package xunit.runner.visualstudio\n\nApós a instalação, crie uma pasta Features no projeto — é lá que seus arquivos .feature com os cenários vão ficar.
Escrevendo o primeiro cenário BDD em Gherkin
\n\nGherkin é uma linguagem de descrição de comportamento. Ela usa palavras-chave: Feature, Scenario, Given, When, Then, And, But.
Vamos descrever um cenário simples: um usuário tenta pagar um pedido e, se o valor for maior que 1000 reais, ele recebe um e-mail.
\n\nCrie o arquivo Payment.feature na pasta Features:
Feature: Notificação de Pagamento\n Como um cliente\n Eu quero receber um e-mail após o pagamento\n Para que eu tenha uma confirmação da minha compra\n\nScenario: Pagamento bem-sucedido acima de 1000 reais envia notificação\n Dado um cliente com saldo de 5000 reais\n Quando o cliente paga um pedido de 1500 reais\n Então o cliente deve receber uma notificação por e-mail\n\nScenario: Pagamento abaixo de 1000 reais não envia notificação\n Dado um cliente com saldo de 5000 reais\n Quando o cliente paga um pedido de 500 reais\n Então o cliente não deve receber nenhuma notificação por e-mail\n\nObserve: aqui