BDD em Kotlin: Como escrever testes que até os gerentes entendem

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

BDD em Kotlin: Escrevendo testes que gerentes e desenvolvedores leem

\n\n

Você já mostrou um teste unitário para o seu gerente de produto? Provavelmente não. Porque é como mostrar os diagramas de um motor a jato para um piloto — útil, mas incompreensível. O Behaviour-Driven Development (BDD) em Kotlin resolve exatamente esse problema: ele transforma asserts secos em cenários vivos que descrevem o comportamento do sistema em linguagem humana.

\n\n

Neste artigo, vamos explorar como implementar BDD em Kotlin usando frameworks modernos — Kotest e Spek. Você verá como escrever testes no estilo Given-When-Then, que são ao mesmo tempo documentação e verificação automática. E sim, até seu líder técnico sem preparação conseguirá lê-los.

\n\n

O que é BDD e como ele difere do TDD?

\n\n

Muitos confundem TDD (Test-Driven Development) e BDD (Behaviour-Driven Development). A diferença é simples:

\n\n
    \n
  • TDD — é sobre "como vou testar este método?"
  • \n
  • BDD — é sobre "como o usuário obterá valor desta funcionalidade?"
  • \n
\n\n

O desenvolvimento orientado a comportamento foca no comportamento do sistema, não nos detalhes de implementação. Você descreve um cenário: sob certas condições (Given), quando uma ação ocorre (When), o sistema produz um resultado esperado (Then).

\n\n

Por exemplo, em vez de escrever:
assertEquals(42, calculator.add(20, 22)),
você escreverá:

\n\n
Given("eu tenho uma calculadora") {\n    val calc = Calculator()\n    When("eu somo 20 e 22") {\n        val result = calc.add(20, 22)\n        Then("o resultado deve ser 42") {\n            result shouldBe 42\n        }\n    }\n}\n
\n\n

Concorde que a segunda opção se lê como uma história, não como uma instrução técnica.

\n\n

Por que Kotlin é ideal para BDD

\n\n

Kotlin é uma linguagem que por si só favorece a escrita de código legível. Funções de extensão, notação infixa, lambdas com receptor — tudo isso torna os testes BDD em Kotlin extremamente naturais. Você pode escrever shouldBe, shouldThrow e outros matchers que parecem inglês.

\n\n

Além disso, Kotlin suporta múltiplos paradigmas, permitindo o uso de diferentes frameworks para BDD. Vamos analisar os dois mais populares.

\n\n

Framework Kotest: BDD nativo

\n\n

Kotest (anteriormente KotlinTest) é um poderoso framework de teste multiplataforma. Ele suporta vários estilos, incluindo BehaviorSpec, que é perfeito para BDD.

\n\n

Aqui está um cenário BDD completo em Kotlin usando Kotest:

\n\n
import io.kotest.core.spec.style.BehaviorSpec\nimport io.kotest.matchers.shouldBe\n\nclass CartSpec : BehaviorSpec({\n    given("carrinho vazio") {\n        val cart = ShoppingCart()\n        `when`("adicionamos um item com preço 100") {\n            cart.addItem(Item("Livro", 100.0))\n            then("o carrinho deve ter 1 item") {\n                cart.itemCount shouldBe 1\n            }\n            then("o total deve ser 100") {\n                cart.total shouldBe 100.0\n            }\n        }\n        `when`("adicionamos um item e aplicamos desconto de 10%") {\n            cart.addItem(Item("Livro", 100.0))\n            cart.applyDiscount(10.0)\n            then("o valor final deve ser 90") {\n                cart.total shouldBe 90.0\n            }\n        }\n    }\n})\n
\n\n

Observe as aspas invertidas em torno de when. Esta é uma peculiaridade do Kotlin: when é uma palavra reservada, mas entre aspas funciona como identificador. Alguns desenvolvedores preferem usar When com letra maiúscula.

\n\n

Spek: BDD estruturado para Kotlin

\n\n

Spek

Blogs

Book Recommendations