Como testes controlam dependências sem contaminar uns aos outros?
Fixtures, doubles e ambientes repetíveis no Prova 0.2.
Por que um teste passa sozinho e falha quando outro é executado antes dele?
cria_configuracao PASSOU
usa_configuracao_padrao FALHOU
--filter usa_configuracao_padrao
usa_configuracao_padrao PASSOUO primeiro deixa um arquivo. Independência é o resultado não depender de outros casos; isolamento são mecanismos de proteção; determinismo repete entradas; repetibilidade reconstrói o ambiente.
| Fronteira | Estratégia |
|---|---|
| stack, globais e heap | contexto Cadência novo |
| arquivos | raiz temporária exclusiva |
| tempo e acaso | contratos substituíveis |
| serviço externo | fake local sem rede pública |
O garbage collector remove objetos mortos; não corrige um global compartilhado ainda alcançável.
setup ──falha──┐ ↓ ├─► guarda/finally ─► teardown teste ─falha───┘
Uma guarda Rust possui o temporário e o remove em Drop. Falha de teardown aparece separadamente; escondê-la mascararia contaminação.
fixture banco_vazio() { retorne TempStore.novo() }
teste "salva usuário" usa banco_vazio como banco {
banco.salvar("Lia")
assert_eq(banco.total(), 1)
}Fixture de suíte economiza preparação, mas reintroduz compartilhamento. O Prova prefere escopo de caso.
| Double | Comportamento |
|---|---|
| Dummy | preenche parâmetro não usado |
| Stub | devolve resposta programada |
| Fake | implementa versão simplificada |
| Spy | registra interações |
| Mock | verifica expectativas |
Um fake fiel costuma ser menos frágil do que mockar tudo.
contrato Relogio { agora() -> Instante }
função expira(token, relogio) {
retorne token.limite < relogio.agora()
}Produção entrega RelogioSistema; teste entrega RelogioFalso. O projeto define a fronteira e o framework fornece a fixture.
10:00 ── avançar(5m) ─► 10:05 seed 731 ─► mesma sequência
Duração usa relógio monotônico; comportamento usa o relógio injetado. A seed sempre aparece na falha.
Caminhos absolutos, .. e symlinks que escapam são recusados. Cada caso recebe pasta exclusiva. A limpeza ocorre após falha; preservar artefatos exige opção explícita.
Cada linha parametrizada vira caso próprio. Propriedades usam seed registrada e um redutor didático que remove elementos até encontrar exemplo menor.
FALHOU ordenar_idempotente
seed: 731
exemplo reduzido: [2, 1]Ordens forward, reverse e embaralhada repetem a suíte. Divergência denuncia vazamento. Retry jamais transforma a primeira falha em sucesso silencioso.
Processos e recursos não modelados ainda podem ser compartilhados. O pacote oferece lifecycle, fixtures, doubles, relógio, seed e filesystem controláveis. Closures são úteis em callbacks, mas também podem conservar estado capturado.
PROJETO COMPLETO · ESTADO EXATO DESTE CAPÍTULO
Baixe o Prova 0.2.
Pacote exclusivo com código Rust e fixtures Pulso. Nenhum download anterior é substituído.