Desafio: Crie um decorador chamado log_chamada
que imprime uma mensagem toda vez que a função decorada é chamada. Essa mensagem deve incluir o nome da função e os argumentos (posicionais e nomeados) passados para ela. Além disso, você deve criar testes unitários para as funções decoradas (testando a funcionalidade base, sem o log do decorador).
Requisitos Detalhados:
meu_modulo.py
ou similar) com as seguintes funções:
saudar(nome)
"Olá, [nome]!"
.calcular_potencia(base, expoente)
base
elevado a expoente
.dividir_numeros(dividendo, divisor)
divisor
for 0
, deve levantar uma exceção ValueError
com a mensagem "Não é possível dividir por zero."
.log_chamada
:
log_chamada
.wrapper
que aceite args
e *kwargs
para lidar com qualquer número/tipo de argumentos.func
), a wrapper
deve imprimir uma mensagem de log no formato: Chamando função '[nome_da_funcao]' com args=[argumentos_posicionais], kwargs={argumentos_nomeados}
.
func.__name__
para obter o nome da função.wrapper
deve chamar a func
com os args
e *kwargs
e retornar o resultado da func
.@functools.wraps(func)
sobre a função wrapper
para preservar os metadados da função original.@log_chamada
a todas as três funções (saudar
, calcular_potencia
, dividir_numeros
).test_meu_modulo.py
ou similar) usando unittest
:
unittest.TestCase
.saudar
, calcular_potencia
, dividir_numeros
). Lembre-se: teste a funcionalidade da função, NÃO a saída do log do decorador.
saudar
: Testar se retorna a string correta.calcular_potencia
: Testar com diferentes bases e expoentes.dividir_numeros
: Testar com divisões válidas e, crucialmente, testar se a exceção ValueError
é levantada ao dividir por zero (use self.assertRaises
).if __name__ == "__main__":
):
log_chamada
e ver a saída no console.wrapper
não é necessário pois está encapsulado).black
e isort
para formatar seus arquivos Python antes de me enviar.