BDD em Go: Como escrever testes que o negócio entende

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

Quando o código se transforma em história

\n

Imagine: você escreve código em Go, executa os testes — barra verde. Mas o gerente olha para o seu t.Errorf e não entende o que exatamente quebrou. O negócio diz: "Faça com que o usuário possa se registrar", e o desenvolvedor traduz isso para "POST /api/v1/user com validação de email". A lacuna entre a linguagem técnica e a humana é a principal dor de cabeça de muitos projetos.

\n

Existe uma solução — BDD (Behaviour-Driven Development) em Go. Não são apenas testes. É uma ponte entre o código e a lógica de negócio. Neste artigo, vamos abordar como escrever testes BDD em Go, usando exemplos reais, e por que seu gerente de produto vai te agradecer.

\n\n

O que é BDD e por que Go?

\n

Behaviour-Driven Development (desenvolvimento orientado a comportamento) é uma evolução do TDD. Se o TDD foca no "como" (como implementar uma função), o BDD responde ao "o quê" (o que o sistema deve fazer do ponto de vista do usuário).

\n

Go é ideal para BDD devido à sua simplicidade, pacote nativo testing e frameworks poderosos como Ginkgo e Godog. A comunidade Go usa ativamente BDD para microsserviços, APIs e até utilitários de linha de comando.

\n\n

Princípios-chave do BDD em Go

\n
    \n
  • Linguagem Ubíqua (Ubiquitous Language) — os cenários são escritos em inglês ou português compreensível para o negócio.
  • \n
  • Given-When-Then — estrutura de qualquer cenário: premissas → ação → resultado esperado.
  • \n
  • Automação — os cenários se transformam em testes executáveis em Go.
  • \n
\n\n

Ferramentas para BDD em Go

\n

A escolha do framework depende de como você deseja descrever os cenários. Aqui estão duas abordagens principais:

\n\n

1. Ginkgo + Gomega (para desenvolvedores Go)

\n

Ginkgo é um framework BDD escrito em Go puro. Os cenários parecem código Go com descrições legíveis. Gomega é uma biblioteca de matchers para asserções.

\n

Vantagens: controle total sobre o código, excelente integração com ferramentas Go, suporte a testes assíncronos.

\n\n

2. Godog (Cucumber para Go)

\n

Godog é uma implementação do Cucumber em Go. Você escreve cenários em Gherkin (arquivos Feature em linguagem natural) e depois implementa os passos em Go.

\n

Vantagens: cenários legíveis mesmo para não programadores, fácil alterar a lógica sem editar o código.

\n\n

Prática: escrevendo um teste BDD em Go com Ginkgo

\n

Vamos criar um serviço simples — um carrinho de compras de e-commerce. Vamos escrever um teste BDD que verifica a adição de um produto.

\n\n

Passo 1: Instalação do Ginkgo

\n
go get github.com/onsi/ginkgo/v2\ngo get github.com/onsi/gomega
\n\n

Passo 2: Inicialização do pacote de teste

\n
cd mycart\nginkgo bootstrap
\n

O arquivo mycart_suite_test.go é criado.

\n\n

Passo 3: Escrevendo o cenário

\n

Crie o arquivo cart_test.go:

\n
package mycart_test\n\nimport (\n    . "github.com/onsi/ginkgo/v2"\n    . "github.com/onsi/gomega"\n    "mycart"\n)\n\nvar _ = Describe("Carrinho", func() {\n    var cart *mycart.Cart\n\n    BeforeEach(func() {\n        cart = mycart.NewCart()\n    })\n\n    Describe("Adição de produto", func() {\n        Context("com ID e preço corretos", func() {\n            It("deve aumentar a quantidade de itens em 1", func() {\n                cart.AddItem("sku-123", 100.0)\n                Expect(cart.TotalItems()).To(Equal(1))\n            })\n\n            It("deve calcular corretamente o valor total", func() {\n                cart.AddItem("sku-123", 100.0)\n                cart.AddItem("sku-456", 250.0)\n                Expect(cart.TotalPrice()).To(BeNumerically("~", 350.0, 0.01))\n            })\n        })\n\n        Context("com produto já existente", func() {\n            It("deve aumentar a quantidade, não adicionar um novo item", func() {\n                cart.                

Blogs

Book Recommendations