Hooks de Ciclo de Vida
Nesta página
Dentro de um @suite, funções anotadas com os hooks de ciclo de vida
preparam e limpam o estado compartilhado sem repetir código em cada teste.
| Decorator | Quando roda |
|---|---|
@before_all |
Uma vez antes do primeiro teste |
@before_each |
Antes de cada teste individual |
@after_each |
Depois de cada teste individual |
@after_all |
Uma vez após o último teste |
O exemplo abaixo usa um mapa compartilhado state para demonstrar que
@before_each incrementa state.n uma vez por teste, @after_each
registra teardowns, e @before_all roda exatamente uma vez para toda a
suíte:
Executa via zolo test. O teste segunda valida os contadores acumulados
por ambos os hooks para provar a ordem de execução.
06-hooks.zolo
// Lifecycle hooks (T2): @before_each / @after_each / @before_all / @after_all.
//
// `before_each` runs before EACH test in the suite, so the shared counter
// `state.n` increments to 1 before `primeira` and to 2 before `segunda`.
@suite("contador")
mod hook_suite {
let state = #{ "n": 0, "torn_down": 0, "setup_all": 0 }
@before_all
fn open() { state.setup_all = state.setup_all + 1 }
@before_each
fn inc() { state.n = state.n + 1 }
@after_each
fn teardown() { state.torn_down = state.torn_down + 1 }
@test
fn primeira() { expect(state.n).to_eq(1) }
@test
fn segunda() {
// before_each ran twice; after_each ran once (after `primeira`);
// before_all ran exactly once.
expect(state.n).to_eq(2)
expect(state.torn_down).to_eq(1)
expect(state.setup_all).to_eq(1)
}
}
Requer a CLI/host do Zolo — abra no playground ou rode localmente.
Os hooks têm acesso às mesmas variáveis declaradas no escopo do módulo
@suite, por isso o estado pode ser mutado livremente entre eles e os
testes.
Veja também