BDD em Rust: Escrevendo código vivo com Cucumber e Specs

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 BDD em Rust não é sobre testes chatos

\n\n

Imagine: você está escrevendo um serviço de alta carga em Rust. Código seguro, rápido, mas quando o produto chega ao cliente, ele diz: "Ah, eu pensei que o botão deveria funcionar de outra forma". Familiar? A clássica lacuna entre código e expectativas. É aqui que o BDD (Behaviour-Driven Development) vem em socorro — uma metodologia que traduz requisitos de negócios para uma linguagem compreensível tanto para o gerente quanto para o compilador Rust.

\n\n

Neste artigo, vamos explorar como implementar BDD em Rust na prática. Você aprenderá a escrever cenários em linguagem humana (Gherkin), automatizá-los com cucumber e specs, e por que isso torna seu código não apenas confiável, mas também transparente para toda a equipe. Sem enrolação — apenas código vivo e exemplos reais.

\n\n

O que é BDD e por que Rust é ideal para ele

\n\n

Behaviour-Driven Development é uma evolução do TDD. Enquanto o TDD foca em "como testar o código", o BDD responde à pergunta "qual comportamento queremos ver". Você escreve cenários na linguagem Gherkin (Given-When-Then), que são ao mesmo tempo testes e documentação.

\n\n

Rust — uma linguagem que adora rigor e previsibilidade. BDD em Rust oferece:

\n
    \n
  • Código autodocumentado — qualquer desenvolvedor lê o cenário e entende a lógica de negócios.
  • \n
  • Segurança em nível de tipos — o compilador verifica se seus passos correspondem à estrutura.
  • \n
  • Execução paralela — testes BDD em Rust rodam rapidamente graças a async e multithreading.
  • \n
\n\n

Quando o BDD em Rust é especialmente útil?

\n
    \n
  • Serviços de API com contratos claros (REST, GraphQL).
  • \n
  • Sistemas com regras de negócios (finanças, logística, jogos).
  • \n
  • Microsserviços onde a integração entre componentes é importante.
  • \n
\n\n

Ferramentas para BDD em Rust: Cucumber e Specs

\n\n

O ecossistema Rust oferece duas abordagens principais:

\n\n

1. cucumber — framework BDD clássico

\n

Permite escrever cenários em Gherkin (arquivos .feature) e vinculá-los ao código Rust. Suporta async, macros personalizadas e relatórios.

\n\n

2. specs — alternativa leve e rápida

\n

Não requer arquivos Gherkin — os cenários são escritos diretamente em Rust usando macros. Ideal se você não quiser carregar um parser separado.

\n\n

Vamos nos concentrar no cucumber, pois ele oferece máxima flexibilidade e está alinhado ao padrão BDD.

\n\n

Escrevendo o primeiro cenário BDD em Rust

\n\n

Vamos criar uma calculadora de descontos simples. Regra de negócio: se o valor da compra for maior que 1000 reais, desconto de 10%. Caso contrário — 0%.

\n\n

Passo 1. Instalação de dependências

\n

Adicione ao Cargo.toml:

\n
[dev-dependencies]\ncucumber = "0.20"\ntokio = { version = "1", features = ["full"] }\nasync-trait = "0.1"\n
\n\n

Passo 2. Criando o arquivo feature

\n

Arquivo tests/features/discount.feature:

\n
Feature: Cálculo de desconto\n  Como um comprador\n  Quero obter desconto em uma compra grande\n  Para economizar dinheiro\n\n  Scenario: Compra maior que 1000 reais\n    Given o valor da compra é "1500"\n    When eu solicito o cálculo do desconto\n    Then o valor do desconto deve ser "150"\n\n  Scenario: Compra menor que 1000 reais\n    Given o valor da compra é "500"\n    When eu solicito o cálculo do desconto\n    Then o valor do desconto deve ser "0"\n
\n\n

Passo 3. Escrevendo os passos em Rust

\n

Crie tests/steps/discount_steps.rs:

\n
use cucumber::{given, then, when, World};\nuse async_trait::async_trait;\n\n#[derive(Debug, Default)]\nstruct DiscountWorld {\n    purchase_amount: f64,\n    discount: f64,\n}\n\n#[async_trait(?Send)]\nimpl World for DiscountWorld {\n    // Implementação vazia para simplificar\n    async fn new() -> Self {\n        Self::d                

Blogs

Book Recommendations