Pular para o conteúdo

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 10

Os 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() exists

Suí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 105

No 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
ModificadorFaz
tagged "a", "b"marca, para --tag e --sem-tag
pending "motivo"não roda; o relatório mostra o motivo
onlycom um only na suíte, os focados rodam
repeat nroda n vezes — instabilidade aparece
within msfalha 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