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.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: O comando assert.
Os objetivos desta aula. 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.
Veja o essencial, parte por parte.
Como o assert funciona. assert condição: se a condição for verdadeira, o programa segue em silêncio.
A mensagem que explica a falha. assert é para testes e checagens internas, não para validar entrada do usuário.
Testando o entendimento. Vale reforçar a diferença entre os dois usos de uma condição que você já conhece.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
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):
# ...
# AssertionErrorCom 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.0A 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.