TDD: a lista de testes antes do código

nível 2 · 20 min · lista de testes (TDD)

No TDD, o teste vem antes do código: você escolhe o próximo comportamento, escreve um teste que falha, escreve o mínimo para passar e limpa. O que decide o próximo teste é a lista de testes, o inventário do que o código precisa fazer.

Quem começa a programar pelos dois testes que já estão na tela termina cedo e errado. A lista sai das regras do enunciado: cada regra vira ao menos um caso com entrada e saída esperada, e o que ela tem de mais traiçoeiro (pontas, repetições, vazio) vira o caso seguinte.

Regra prática. Antes de programar, transforme cada regra em um caso de teste com entrada e saída. Depois escolha um por vez: faça passar, e só então vá ao próximo.

Monte a lista de testes

A função slugify(title) transforma o título de um artigo no fim da URL. Estas são as regras do enunciado como lista de testes. Os dois testes visíveis cobrem só as duas primeiras linhas.

Regras do enunciado como casos de teste
RegraEntradaSaída esperadaTestes visíveis
Minúsculas, palavras separadas por hífen"Hello World""hello-world"cobre
Dígitos ficam"Top 10""top-10"cobre
Mais de duas palavras"Testing in production""testing-in-production"não cobre
Espaços repetidos e nas pontas viram um só hífen, sem hífen nas pontas" many spaces ""many-spaces"não cobre
Pontuação é descartada"What's new?""whats-new"não cobre
Acentos são removidos"Café com leite""cafe-com-leite"não cobre
Hífen do título é separador, não dobra"Before - after""before-after"não cobre
Título em branco" """não cobre

Exercício: escreva o código

Seu código precisa passar nos testes visíveis e nas checagens ocultas, que cobrem o resto da lista.

Escreva slugify(title), que transforma o título de um artigo na parte final da URL.

Regras: minúsculas; palavras separadas por um único hífen; acentos removidos ("é" vira "e"); tudo que não for letra, dígito ou espaço é descartado; sem hífen no começo nem no fim; título vazio ou em branco devolve "".

Os dois testes visíveis cobrem só a primeira regra. As checagens ocultas cobrem o resto: leia as regras como uma lista de testes e vá por ela.

Testes visíveis

test("junta duas palavras em minúsculas", () => {
  expect(slugify("Hello World")).to.equal("hello-world");
});

test("mantém os dígitos", () => {
  expect(slugify("Top 10")).to.equal("top-10");
});

Seu código

Referências

  • ISTQB® Certified Tester Foundation Level v4.0, tradução BSTQB, seção 2.1, Teste no Contexto de um Ciclo de Vida de Desenvolvimento de Software. © ISTQB®.