Pular para o conteúdo

Testes parametrizados

Uma tabela de casos, um corpo só — e o caso que falhou aparece pelo nome.

Quando dez testes têm o mesmo corpo e mudam só os dados, eles são uma tabela. Crucible.table roda um trial por linha: o corpo é escrito uma vez, e a falha diz qual linha quebrou.

dataforge
adopt Arcane.Crucible

action categoria(idade):
    given idade smaller 0:
        trigger "idade negativa"
    given idade smaller 12:
        yield "crianca"
    given idade smaller 18:
        yield "adolescente"
    given idade smaller 60:
        yield "adulto"
    yield "idoso"

crucible "categoria por idade":
    Crucible.table("limites", [
        {"idade": 0, "esperado": "crianca"},
        {"idade": 11, "esperado": "crianca"},
        {"idade": 12, "esperado": "adolescente"},
        {"idade": 17, "esperado": "adolescente"},
        {"idade": 18, "esperado": "adulto"},
        {"idade": 59, "esperado": "adulto"},
        {"idade": 60, "esperado": "idoso"}
    ], lambda caso: Crucible.expect(categoria(caso["idade"])).to_be(caso["esperado"]))

    trial "idade negativa e recusada":
        expect(lambda => categoria(-1)).to_raise()

r := Crucible.run()
assert r["falhou"] is 0
assert r["passou"] is 8

Quando usar tabela, e quando não#

TabelaTrials separados
o corpo é o mesmo e só os dados mudamcada caso confere uma coisa diferente
os limites de uma regracaminhos diferentes (sucesso, erro, vazio)
a tabela da lei, linha por linhao caso precisa de preparo próprio

Para milhares de entradas geradas, e não uma tabela escrita: Teste por propriedade.