Fixtures e ganchos
Preparo e limpeza no mesmo lugar — e por que isso não é detalhe.
Os ganchos#
dataforge
crucible "Ganchos":
setup all:
// uma vez, antes de tudo
origem := "arquivo.csv"
setup:
// antes de CADA trial, num quadro novo
base := 10
teardown:
// depois de cada trial, mesmo se ele falhar
expect yes
trial "usa o setup":
expect base is 10Os ganchos rodam da raiz para dentro: o setup mais geral prepara o terreno, o mais específico ajusta. A ordem inversa faria o ajuste ser sobrescrito pelo preparo.
Fixture: preparo e limpeza juntos#
provide divide a fixture em duas metades. O que vem antes prepara; o que vem depois limpa:
dataforge
crucible "Banco":
fixture banco():
adopt Forge
db := Forge.conectar(":memory:")
Forge.executar(db, "create table t (id integer primary key)")
provide db
Forge.fechar(db)
trial "usa o banco":
expect banco() existsSuítes aninhadas#
Uma suíte dentro de outra herda os ganchos e as fixtures da de fora:
dataforge
crucible "Loja":
setup:
estoque := 100
crucible "Venda":
trial "vê o estoque do pai":
expect estoque is 100
crucible "Devolução":
setup:
devolvidos := 5
trial "vê os dois":
expect estoque + devolvidos is 105No relatório, o caminho aparece inteiro: Loja > Devolução > vê os dois.
Modificadores do trial#
dataforge
crucible "Modificadores":
trial "marcado" tagged "rápido", "unitário":
expect 1 is 1
trial "adiado" pending "esperando a API do fornecedor":
expect 1 is 2
trial "com prazo" within 100:
expect 1 is 1
trial "repetido" repeat 5:
expect 1 is 1
trial "é par" over [2, 4, 6]:
expect caso % 2 is 0| Modificador | Faz |
|---|---|
tagged "a", "b" | marca, para --tag e --sem-tag |
pending "motivo" | não roda; o relatório mostra o motivo |
only | com um only na suíte, só os focados rodam |
repeat n | roda n vezes — instabilidade aparece |
within ms | falha se passar do prazo |
over [a, b, c] | um trial por linha, com caso ligado |
Trial parametrizado#
over gera um resultado por linha, e o nome do trial mostra qual falhou:
dataforge
crucible "Tabela":
trial "dobra certo" over [[1, 2], [2, 4], [3, 6]]:
expect caso[0] * 2 is caso[1]Se o segundo caso falhar, o relatório diz dobra certo [[2, 4]] — não "um dos três".
Foco#
Com um only em qualquer trial da suíte, só os focados rodam. É para depurar, não para versionar:
dataforge
crucible "Depurando":
trial "este" only:
expect 1 is 1
trial "aquele não roda":
expect 1 is 2