O que é: Assertion

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 > 0 para 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 assert para 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.

Como podemos te ajudar?

Entre em contato conosco hoje mesmo e descubra como nossa empresa de marketing pode impulsionar suas vendas, aumentar sua visibilidade online e alcançar seus objetivos de negócios.

Desenvolvemos projetos conforme as necessidades e objetivos de cada cliente, sempre com processos bem definidos e transparentes do planejamento ao controle, facilitando a comunicação com as partes interessadas e a melhoria contínua das ações de marketing implementadas.

Danilo Pedrosa
Especialista em Projetos de Marketing, Shiftmind