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#
| Defeito | Onde ele é pego |
|---|---|
| a conta de desconto errada | unitário |
| o SQL que o banco recusa | integração |
| o JSON que a rota não entende | integração (Kiln.test) |
o main.df que não liga as peças | ponta a ponta |
| a corrida entre dois pedidos | ponta a ponta, com servidor de verdade |
| o teste que não testa | mutação — Crucible.mutar |
O que não testar#
| Não teste | Porque |
|---|---|
| a biblioteca dos outros | sorted já é testado; teste o seu uso dele |
| o código gerado | teste 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 privados | o 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.