Pular para o conteúdo

A pirâmide, e o que não testar

Quantos de cada tipo, onde o custo mora — e as quatro coisas que não merecem teste.

A pirâmide não é uma regra de proporção: é uma consequência de custo. Um teste unitário roda em milissegundos e aponta a linha; um ponta a ponta leva segundos e diz “algo quebrou”. Por isso a base é larga e o topo é estreito — e uma suíte de cabeça para baixo é lenta, instável e não diz onde procurar.

text
          ▲  ponta a ponta   poucos · segundos · "algo quebrou"
         ▲▲▲  integracao      dezenas · dezenas de ms · "qual encaixe"
      ▲▲▲▲▲▲▲  unitarios      centenas · milissegundos · "qual linha"

Onde cada tipo de defeito aparece#

DefeitoOnde ele é pego
a conta de desconto erradaunitário
o SQL que o banco recusaintegração
o JSON que a rota não entendeintegração (Kiln.test)
o main.df que não liga as peçasponta a ponta
a corrida entre dois pedidosponta a ponta, com servidor de verdade
o teste que não testamutação — Crucible.mutar

O que não testar#

Não testePorque
a biblioteca dos outrossorted já é testado; teste o seu uso dele
o código geradoteste o gerador — ou compare com a saída esperada
o que não tem lógica (um record só com campos)o teste repete a declaração
detalhes privadoso teste quebra a cada refatoração que não mudou nada

Cobertura: um piso, não uma meta#

dataforge test --cobertura --minimo=80 reprova quando a cobertura cai — e é para isso que serve. Como meta ela mente: 100% de linhas executadas não diz que alguma coisa foi conferida. Um teste sem expect cobre tudo e não prova nada.

bash
dataforge test tests/ --cobertura            # quais linhas rodaram
dataforge test tests/ --cobertura --minimo=80 # reprova abaixo de 80%
dataforge crucible tests/ --mutar src/regras.df  # o teste pega a mudanca?

Continue em Cobertura e Testes instáveis.