Arquitetura software
BDD na Pratica: Next.js e Spring Boot
Behavior-Driven Development (BDD) conecta negocio, produto e engenharia por meio de exemplos executaveis. O objetivo e reduzir ambiguidade e transformar requisitos em comportamento verificavel.
O que e BDD
BDD estende ideias de TDD com foco em linguagem de negocio:
- descreve comportamento esperado em linguagem natural;
- usa exemplos concretos para alinhar entendimento;
- automatiza cenarios como testes vivos.
Formato comum: Given / When / Then.
Fluxo recomendado
- Product + Engenharia definem exemplos de negocio.
- Exemplos viram cenarios Gherkin.
- Cenarios falham inicialmente.
- Implementacao minima para passar.
- Refatoracao sem quebrar comportamento.
Exemplo de cenario (Gherkin)
Feature: Checkout
Scenario: Aplicar desconto VIP
Given um cliente VIP com carrinho de R$ 200,00
When ele finaliza a compra
Then o valor final deve ser R$ 170,00Esse cenario vira teste automatizado e documentacao executavel.
BDD em Next.js
Stack comum:
@cucumber/cucumberpara cenarios;- Playwright para E2E;
- Vitest/Jest para camadas internas.
Exemplo de step definition:
import { Given, When, Then } from "@cucumber/cucumber"
import { expect } from "@playwright/test"
Given("um cliente VIP com carrinho de R$ 200,00", async function () {
await this.page.goto("/checkout")
await this.page.fill("[name=customerType]", "VIP")
await this.page.fill("[name=amount]", "200")
})
When("ele finaliza a compra", async function () {
await this.page.click("button[type=submit]")
})
Then("o valor final deve ser R$ 170,00", async function () {
await expect(this.page.locator("[data-testid=final-amount]")).toHaveText("170.00")
})BDD em Spring Boot
Stack comum:
- Cucumber JVM;
- JUnit Platform;
- Spring Boot Test + Testcontainers.
@SpringBootTest
@AutoConfigureMockMvc
public class CheckoutSteps {
@Autowired private MockMvc mvc;
private ResultActions response;
@When("ele finaliza a compra")
public void finalizaCompra() throws Exception {
response = mvc.perform(post("/checkout")
.contentType(MediaType.APPLICATION_JSON)
.content("{\"customerType\":\"VIP\",\"amount\":200.00}"));
}
@Then("o valor final deve ser R$ 170,00")
public void validaTotal() throws Exception {
response.andExpect(status().isOk())
.andExpect(jsonPath("$.finalAmount").value(170.00));
}
}Boas praticas
- Cenario descreve regra de negocio, nao detalhe de tela.
- Linguagem sem jargao tecnico.
- Cenários curtos e independentes.
- Um feature por capacidade de negocio.
- Evite overlap de cenarios com testes unitarios.
Anti-padroes
- Cenarios longos (10+ passos).
- Steps muito acoplados a CSS/XPath.
- BDD usado so para E2E lento.
- Features sem revisao com negocio.
Estrategia de teste em camadas
- Unidade: regra e calculos (rapido).
- Componente/API: contratos de endpoint.
- BDD: jornada de negocio principal.
BDD nao substitui os demais testes. Ele ancora entendimento do comportamento.
Recursos recomendados
YouTube
Artigos e documentacao
Papers e estudos
Livros
- Specification by Example - Gojko Adzic
- BDD in Action - John Ferguson Smart
- The Cucumber for Java Book
Posts no X (opcional)
Conclusao
BDD melhora previsibilidade de entrega porque transforma expectativa de negocio em contrato executavel. Em Next.js e Spring Boot, ele funciona melhor quando combinado com bons testes unitarios e de API.