Cenários — dado, quando, então
Comportamento escrito como frase, e a falha que diz em qual frase quebrou.
Crucible.cenario escreve o teste como o comportamento é descrito: dado o estado, quando algo acontece, então o resultado. O ganho não é a sintaxe — é que a falha passa a dizer em qual frase quebrou, e essa frase é a que o negócio escreveu.
dataforge
adopt Arcane.Crucible as C
c := C.cenario("saque acima do saldo")
c.dado("uma conta com R$ 100", lambda m: m.set("saldo", 100))
c.e("um limite de R$ 50", lambda m: m.set("limite", 50))
c.quando("tento sacar R$ 120", lambda m: m.set("ok", 120 smaller_eq m["saldo"] + m["limite"]))
c.entao("o saque e aceito", lambda m: m["ok"])
c.e("o saldo seria negativo", lambda m: m["saldo"] - 120 smaller 0)
out c.texto()
r := c.rodar()
assert r["ok"] and len(r["passos"]) is 5A falha nomeia o passo#
dataforge
adopt Arcane.Crucible as C
c := C.cenario("frete gratis")
c.dado("um carrinho de R$ 180", lambda m: m.set("total", 180))
c.quando("calculo o frete", lambda m: m.set("frete", 0 given m["total"] bigger_eq 200 otherwise 15))
c.entao("o frete e zero", lambda m: m["frete"] is 0)
monitor:
c.rodar()
assert no
handle Error as e:
out e.message
assert "passo 3" in e.message and "o frete e zero" in e.messageAs três regras que ele cobra#
| Regra | Porque |
|---|---|
| a ordem é dado → quando → então | um preparo depois da ação faz o cenário testar duas coisas, e a falha não diz qual — um dado depois de quando é recusado na montagem |
| sem `entao` não há cenário | um cenário que só prepara e age não confere nada, e passaria sempre |
| os passos dividem um `mundo` | variável solta entre passos esconde de onde veio o valor que o entao confere |
Continue em Testes de integração.