Projeto 12 - Calculadora Robusta com Testes
🎯 Objetivo
Criar uma calculadora que realiza as 4 operações básicas, mas que é "imune" a erros de digitação e divisão por zero.
📋 Requisitos
Crie um módulo calculadora.py:
1. Funções: somar(a, b), subtrair(a, b), multiplicar(a, b), dividir(a, b).
2. A função dividir deve lançar (raise) um ValueError se o divisor for zero (ou deixar o Python lançar ZeroDivisionError, mas vamos tratar no menu).
3. Função ler_numero(mensagem): Faz um loop infinito pedindo input até o usuário digitar um número válido (float). Trata ValueError internamente.
Crie um main.py (ou bloco main):
- Usa ler_numero para obter os valores.
- Chama as operações.
- Trata erros de divisão por zero.
🧪 Testes Automatizados
Crie test_calculadora.py.
Vamos testar o caminho feliz (sucesso) e o caminho triste (erro).
import pytest # Se tiver pytest instalado, senão use unittest ou try/except manual
from calculadora import dividir
# Vamos usar try/except manual para não depender de bibliotecas externas por enquanto
def testar_divisao():
# Teste Sucesso
assert dividir(10, 2) == 5.0
print("Divisão correta: PASSOU")
# Teste Erro (Divisão por Zero)
try:
dividir(10, 0)
print("Divisão por zero: FALHOU (Deveria ter dado erro)")
except ZeroDivisionError: # ou ValueError, dependendo da sua implementação
print("Divisão por zero: PASSOU (Erro capturado corretamente)")
if __name__ == "__main__":
testar_divisao()
👣 Passo a Passo
- Crie
calculadora.pycom as funções matemáticas. - Implemente
ler_numerousandotry/except ValueErrordentro de umwhile True. - No menu, envolva a chamada da divisão em um
try/exceptpara exibir mensagem bonita em vez de erro vermelho. - Crie o script de teste e valide se o erro é lançado quando deve.
🚀 Desafio Extra
Adicione uma função de Log que salva em arquivo erros.log toda vez que uma exceção acontecer, com data e hora.