Assertion (asserção, em português) é uma declaração em código ou em teste que afirma que determinada condição é verdadeira em um ponto específico da execução. Se a condição for falsa, a execução é interrompida e um erro é lançado. Trata-se de uma ferramenta fundamental tanto para programação defensiva quanto para a escrita de testes automatizados.
TL;DR
- O que é: uma verificação booleana que falha ruidosamente quando a condição esperada não é satisfeita.
- Por que importa: detecta bugs cedo, documenta expectativas e sustenta a confiabilidade de suítes de teste.
- Quando usar: em testes automatizados (unitários, integração, E2E) e em código para validar invariantes internas que jamais deveriam falhar.
Como funciona uma Assertion?
Assertion é uma expressão booleana avaliada em tempo de execução que, se retornar falso, aborta o fluxo normal e sinaliza falha. Em linguagens como Python, a instrução assert expr levanta AssertionError quando expr é falsa. Em frameworks de teste, chamadas como assertEqual(a, b) comparam valores e marcam o teste como falho se o resultado não bater com o esperado. Segundo a documentação do pytest (2024), asserções simples usando o próprio assert do Python são reescritas pelo framework para gerar mensagens de erro detalhadas.
Tipos principais de Assertion
- Assertion em código: validações internas tipo
assert x > 0para capturar estados impossíveis. - Assertion em testes: comparações explícitas em suítes automatizadas, como
assertEqual,assertTrue,assertRaises. - Fluent Assertions: DSLs encadeadas (Chai, AssertJ) que leem como linguagem natural.
- Property-based: asserções sobre propriedades universais, usadas em Hypothesis, QuickCheck e fast-check.
Exemplos de uso
Em Python puro: assert saldo >= 0, 'Saldo não pode ser negativo'. Em JUnit (Java): assertEquals(expected, actual). Em Jest (JavaScript): expect(resultado).toBe(42). Em PHPUnit: $this->assertSame('ok', $resposta). Em C, a macro assert() do header <assert.h> aborta o processo quando a condição é falsa em builds de debug.
Assertion no código vs em testes
No código de produção, asserções servem como rede de segurança para invariantes internas, pré-condições e pós-condições (Design by Contract, Bertrand Meyer, 1988). Nunca devem ser usadas para validar entrada de usuário, pois podem ser desabilitadas em produção (ex.: Python executado com flag -O). Em testes, as asserções são o coração do framework: cada falha reporta diferença entre valor esperado e obtido, orientando o desenvolvedor até a causa raiz.
Por que Assertions são importantes
- Detectam bugs cedo, antes que se propaguem.
- Documentam expectativas diretamente no código.
- Fornecem feedback rápido em pipelines de integração contínua.
- Reduzem o tempo de depuração ao localizar a origem do problema.
- Sustentam a confiança em refatorações de código legado.
Boas práticas
- Prefira asserções específicas (
assertEqual) a genéricas (assertTrue(a == b)) — mensagens de erro ficam mais claras. - Nunca use
assertpara validar input de usuário; use exceções específicas ou validação dedicada. - Mantenha asserções livres de efeitos colaterais (não altere estado dentro de uma asserção).
- Escreva mensagens de erro descritivas que ajudem a diagnosticar a falha.
Quer entender todas as nuances, diferenças entre asserções em testes e no código, e aplicações práticas em Python, Java e JavaScript? Leia o artigo completo no blog da Shiftmind: Assertion (Asserção): como funciona, exemplos em testes e no código.

