Pirâmide de testes e níveis¶
Os scanners descobrem um arquivo de teste de forma agnóstica de nível, mas alguns códigos são lidos de modo diferente conforme o nível. Saber o nível evita um falso positivo: o que é uma assertion fraca num teste de unidade é a assertion correta num teste ponta-a-ponta.
| Nível | Oráculo | Como é a cobertura real |
|---|---|---|
| Unidade | doubles nas fronteiras; assert / expect no valor de retorno |
a lógica da própria unidade, em isolamento |
| Integração (API + BD) | a resposta ou linha real é a verificação | um cliente ou store ao vivo, sem double |
| E2E | um elemento de página ou estado está presente | um driver de navegador ou dispositivo |
O nível é lido por sinais, não chutado¶
As ferramentas leem o nível a partir de pistas concretas, com uma precedência fixa (o sinal mais forte vence):
- Uma fronteira com double mantém o teste em unidade/componente mesmo que um cliente real seja importado. O mock é a fronteira.
- Senão, uma fronteira real (um cliente HTTP ao vivo, um ORM, um driver de banco) torna integração.
- Senão, um driver de navegador ou dispositivo torna E2E.
- Nenhum sinal significa unidade.
Um bloco conventions: sobrescreve tudo isso. Marcadores como smoke, slow, asyncio ou
anyio são neutros de nível.
As isenções cientes do nível¶
Alguns códigos se seguram uma vez que o nível está claro, para não dispararem no padrão correto:
C6(verificação fraca de truthiness) não dispara emassert responsenum teste HTTP ouassert locatornum teste Playwright. Nessas camadas, presença é o contrato.C14(golden file a partir da saída) não dispara em snapshot testing de navegador, onde uma baseline gerada é o fluxo pretendido.C16(tempo descontrolado) não dispara quandofreezegunoutime-machineé importado, porque o relógio está com double.
A regra-mãe¶
Uma chamada real a banco ou API dentro de um teste que se diz de unidade é, por si só, o smell. Não é questão de categoria: é mystery guest, resource optimism, o inverso do over-mocking. Um banco é integração quando bate num datastore real, mesmo um SQLite em memória ou um testcontainer; é unidade quando a camada de dados está com double.
Os proxies estáticos para "I/O real num teste de unidade" são C23 (caminho ou URL de IP
hard-coded, nos três scanners) e C29 / C30 em Python. A skill lê o
nível diretamente e relaxa ou aperta o oráculo conforme.