Verificando Exceções em Python Usando doctest
Ao escrever código em Python, frequentemente precisamos garantir que nossas funções se comportem conforme o esperado, especialmente em relação ao tratamento de erros. Um cenário comum é testar se uma função gera uma exceção sob certas condições. Se você está usando o módulo doctest
do Python para realizar seus testes, pode estar se perguntando: Posso verificar se uma exceção é gerada com doctest
? A resposta é um sonoro sim! Vamos explorar como utilizar doctest
para verificar exceções em suas funções Python.
O Problema: Testando Exceções
Considere uma função chamada foo(x)
. Essa função é projetada para levantar uma exceção se seu argumento for menor que zero. A pergunta central aqui é como escrever um doctest
que confirme que a função se comporta corretamente nesse cenário. Especificamente, quando passamos um valor menor que zero, queremos garantir que uma exceção seja levantada para indicar que algo deu errado.
Função de Exemplo
Aqui está uma versão simples da função foo(x)
:
def foo(x):
if x < 0:
raise ValueError("x deve ser não-negativo")
return x
A Solução: Escrevendo um doctest
Para criar um doctest
que verifica exceções, utilizaremos a seguinte abordagem. Em nosso doctest
, podemos especificar que esperamos que uma exceção seja levantada ao chamar foo()
com um valor que deve acionar o erro. Aqui está como fazer isso passo a passo:
Passo 1: Escreva o Doctest
Na docstring da sua função, você pode adicionar um caso de teste demonstrando a exceção esperada. Veja como fica:
def foo(x):
"""
Retorna x se for não-negativo.
Levanta:
ValueError: Se x < 0.
Exemplos:
>>> foo(-1)
Traceback (most recent call last):
...
ValueError: x deve ser não-negativo
>>> foo(3)
3
"""
if x < 0:
raise ValueError("x deve ser não-negativo")
return x
Passo 2: Execute o Doctest
Para executar o doctest
, inclua o seguinte trecho no final do seu script Python:
if __name__ == "__main__":
import doctest
doctest.testmod()
Passo 3: Saída Esperada
Quando você executar o script, o doctest
irá processar os exemplos na docstring. Se tudo estiver funcionando corretamente, você não verá nenhuma saída (indicando que todos os testes passaram). Se a exceção não for levantada como esperado, o doctest
irá reportar um erro.
Recursos Adicionais
Para mais informações sobre como usar eficazmente o doctest
em seus módulos, consulte a documentação oficial do módulo doctest.
Conclusão
Usar o doctest
para verificar se as exceções são levantadas corretamente não é apenas possível; é simples! Ao adicionar algumas linhas na docstring de sua função, você pode efetivamente documentar e testar o comportamento do seu código, garantindo que ele se adeque aos padrões esperados. Seja escrevendo novas funções ou testando as existentes, o doctest
oferece uma maneira poderosa de incluir testes orientados a exemplos diretamente ao lado do seu código. Aproveite para tornar seu código robusto e boas codificações!