🧩 Exercícios: Arquitetura em Camadas, Testes com Pytest e Auditoria
Spec Sistemas Com Python • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 18.1 — Testes Unitários com Pytest e Asserções Nativas (assert)
Contexto: Testes Unitários com Pytest e Asserções Nativas (assert) no contexto de Arquitetura em Camadas, Testes com Pytest e Auditoria.
Requisitos de Execução:
- Criar suite de testes validando regras de negócio financeiras.
Resultado Esperado
Testes unitários executados e aprovados via Pytest.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_18_1_SeuNome - Envie na tarefa:
Atividade Cap 18 - Arquitetura em Camadas, Testes com Pytest e Auditoria
🔑 Gabarito de Código & Solução Comentada
def calcular_juros(valor: float, taxa: float) -> float:
if taxa < 0:
raise ValueError("Taxa invalida")
return valor * taxa
def test_calcular_juros() -> None:
assert calcular_juros(100.0, 0.05) == 5.0
test_calcular_juros()
print("Teste unitario basico aprovado!")
🔍 Nível 2: Prática
Problema 18.2 — Fixtures do Pytest (@pytest.fixture) para Injeção de Dependências
Contexto: Fixtures do Pytest (@pytest.fixture) para Injeção de Dependências no contexto de Arquitetura em Camadas, Testes com Pytest e Auditoria.
Requisitos de Execução:
- Criar fixture geradora de conexão com banco de dados de teste com teardown automático.
Resultado Esperado
Fixture do Pytest injetando estado isolado para cada caso de teste.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_18_2_SeuNome - Envie na tarefa:
Atividade Cap 18 - Arquitetura em Camadas, Testes com Pytest e Auditoria
🔑 Gabarito de Código & Solução Comentada
import sqlite3
from typing import Generator
def fixture_banco() -> Generator[sqlite3.Connection, None, None]:
conn = sqlite3.connect(":memory:")
yield conn
conn.close()
for c in fixture_banco():
print("Conexao de teste criada e isolada:", c)
⚡ Nível 3: Integração
Problema 18.3 — Testes Parametrizados com @pytest.mark.parametrize
Contexto: Testes Parametrizados com @pytest.mark.parametrize no contexto de Arquitetura em Camadas, Testes com Pytest e Auditoria.
Requisitos de Execução:
- Testar múltiplos casos de borda em único método de teste.
Resultado Esperado
Matriz de testes parametrizados validando entradas e saídas esperadas.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_18_3_SeuNome - Envie na tarefa:
Atividade Cap 18 - Arquitetura em Camadas, Testes com Pytest e Auditoria
🔑 Gabarito de Código & Solução Comentada
casos_teste = [
(10, True),
(7, False),
(0, True),
(-2, True)
]
for num, esperado in casos_teste:
assert (num % 2 == 0) == esperado
print("Todos os cenarios parametrizados foram aprovados!")
🏆 Nível 4: Desafio Corporativo
Problema 18.4 — Mocking com unittest.mock (patch e MagicMock)
Contexto: Mocking com unittest.mock (patch e MagicMock) no contexto de Arquitetura em Camadas, Testes com Pytest e Auditoria.
Requisitos de Execução:
- Isolar chamada de API externa em teste unitário utilizando
mock.patch.
Resultado Esperado
Dependência externa mockada permitindo teste 100% determinístico e offline.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_18_4_SeuNome - Envie na tarefa:
Atividade Cap 18 - Arquitetura em Camadas, Testes com Pytest e Auditoria
🔑 Gabarito de Código & Solução Comentada
from unittest.mock import MagicMock
servico_email = MagicMock()
servico_email.enviar.return_value = True
assert servico_email.enviar("teste@empresa.com") is True
servico_email.enviar.assert_called_once_with("teste@empresa.com")
print("Mock corporativo validado com sucesso!")