Módulo 15 - Testes automatizados

O comando assert

9 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 01/07/2026

O que você vai aprender

  • Entender a sintaxe assert condição e o que acontece em cada caso.
  • Usar a mensagem opcional para explicar a falha.
  • Escrever as primeiras verificações comparando resultado obtido e esperado.
  • Saber que assert some com a otimização e não substitui validação de entrada.

Como o assert funciona

O comando assert recebe uma condição, exatamente do mesmo tipo que você usa em um if. A ideia é simples: você afirma que aquela condição é verdadeira naquele ponto do programa. Se ela realmente for, o Python não faz nada e a execução continua. Se ela for falsa, o Python entende que algo saiu do esperado e interrompe o programa levantando um erro chamado AssertionError. Em outras palavras, assert é o jeito de dizer eu garanto que aqui isto é verdade, e deixar o Python cobrar essa garantia.

def dobro(n):
    return n * 2

# Afirma o que deveria ser verdade:
assert dobro(5) == 10
assert dobro(0) == 0
assert dobro(-3) == -6

print("Todos os asserts passaram!")
# Saida: Todos os asserts passaram!

Três afirmações verdadeiras: nenhuma reclama e o print no final é executado.

Repare no comportamento silencioso quando tudo está certo. Os três asserts acima passam, o programa não imprime nada sobre eles e chega ao print final. Esse silêncio é proposital: teste que passa não precisa falar, teste que falha precisa gritar. Agora veja o que acontece quando a afirmação é falsa, por exemplo se alguém quebrar a função dobro trocando a multiplicação por soma.

def dobro(n):
    return n + 2   # bug: era n * 2

assert dobro(5) == 10
# Saida:
# Traceback (most recent call last):
#   ...
# AssertionError

Com a função quebrada, dobro(5) devolve 7, a condição fica falsa e o assert dispara.

A mensagem que explica a falha

Um AssertionError sem explicação diz que algo deu errado, mas não diz o quê. Por isso o assert aceita uma segunda parte, depois de uma vírgula: uma mensagem que aparece junto do erro. Use-a para descrever o que se esperava, de preferência mostrando o valor que veio errado. Uma boa mensagem transforma um teste que falha de um enigma em um recado direto, e economiza minutos de investigação.

def media(valores):
    return sum(valores) / len(valores)

resultado = media([2, 4, 6])
esperado = 4

assert resultado == esperado, f"esperava {esperado}, veio {resultado}"
print("Media conferida:", resultado)
# Saida: Media conferida: 4.0

A mensagem com f-string mostra o esperado e o obtido, caso a condição falhe.

O padrão que aparece aqui vai se repetir o curso inteiro: você calcula o resultado obtido, escreve o resultado esperado e afirma que os dois são iguais. Essa é a espinha dorsal de qualquer teste, com assert, com unittest ou com pytest. Só muda a roupagem. Guardar bem esse trio, obtido, esperado e a comparação, é entender testes de verdade.

Testando o entendimento

Vale reforçar a diferença entre os dois usos de uma condição que você já conhece. O if pergunta e desvia: se for verdade, faz uma coisa, se não, faz outra. O assert não pergunta, ele exige: se for verdade, segue em frente, se não, para tudo com um erro. Em um teste, você usa assert porque não quer tratar o caso falso com elegância, você quer ser avisado em alto e bom som de que a garantia foi quebrada. É essa a mentalidade que unittest e pytest, nas próximas aulas, apenas organizam e deixam mais confortável.

Teste rápido

O que acontece quando a condição de um assert é falsa?

Perguntas frequentes

Qual a diferença entre assert e if?
O if testa uma condição e desvia o fluxo para tratar cada caso. O assert não trata o caso falso: se a condição for verdadeira ele segue em silêncio, e se for falsa ele interrompe o programa com um AssertionError. Em testes, você quer justamente esse alarme quando a garantia falha.
A mensagem depois da vírgula é obrigatória?
Não, é opcional. Sem ela, um assert que falha levanta um AssertionError sem detalhes. Com ela, você explica o que se esperava, de preferência mostrando o valor obtido com uma f-string. É uma boa prática, porque acelera muito descobrir por que o teste falhou.
Posso usar assert para validar dados digitados pelo usuário?
Não é recomendado. Os asserts somem quando o Python roda com a opção de otimização -O, então uma validação feita com assert simplesmente deixaria de existir. Para dados de fora, use um if que levanta uma exceção com raise, como no módulo de exceções.
Se o assert passa, por que não aparece nada na tela?
Porque teste que passa não precisa falar. O assert só age quando a condição é falsa. Esse silêncio é proposital: você só quer ser interrompido quando algo estiver errado, e não poluir a saída com confirmações de que tudo continua certo.
O que significa comparar obtido e esperado?
É o coração de um teste. Você calcula o resultado que o código produziu (obtido) e escreve o valor que ele deveria produzir (esperado), então afirma que os dois são iguais com assert. Se forem, o teste passa; se não, você é avisado. Todo framework de teste segue essa mesma ideia.
Preciso escrever muitos asserts para testar uma função?
Depende do que a função faz. Um ou dois asserts cobrindo o caso comum já ajudam, mas o ideal é cobrir também os limites e as entradas incomuns, tema de uma aula adiante. Cada assert verifica um resultado esperado, então quanto mais comportamentos a função tem, mais afirmações fazem sentido.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.