Desenvolva testes pytest capazes de distinguir comportamentos com o Copilot
O pytest pode coletar os testes unittest.TestCase existentes da fixture e novas funções
pytest. Uma interface de coleta verde não comprova que uma asserção de regressão foi executada.
Resumo do laboratório

Ilustração conceitual original (SVG)
| Em resumo | Sua rota |
|---|---|
| Nível e tempo | 300; 60 minutos (estimativa de facilitação) |
| Ação inicial | Reúna os testes existentes antes de adicionar casos de encontrado, ausente e não mutação. |
| Materiais do aluno | Baixe 04-pytest.zip |
| Workspace | Abra a raiz do kit extraído; execute a baseline de library relativa a essa raiz |
| Verificação inicial esperada | Os testes unittest existentes são descobertos e passam. |
| Ajuda de configuração | Baixe, extraia, Git local e GitHub opcional |
[!NOTE] Um objeto de dados leve isola a busca no repositório, não o carregamento de JSON.
Conceitos · Primeira tarefa · Lista de evidências · Redefinir
Objetivos de aprendizagem
- Use as convenções de teste existentes e um interpretador selecionado.
- Teste
JsonLoanRepository.get_loan, não um mock desse método. - Verifique IDs encontrados/ausentes e a ausência de mutação.
- Demonstre um teste falhando por uma asserção intencionalmente incorreta.
Antes de começar
Prepare 04-pytest seguindo o guia de configuração.
Use a
fixture de testes Python fornecida.
Selecione um ambiente na unidade de trabalho. Instale requirements.txt nessa cópia
somente se pytest estiver ausente e execute os comandos a partir de library.
Conceitos e casos de uso
get_loan percorre a coleção loans do objeto injetado e retorna o empréstimo
correspondente ou None. Um objeto leve com um atributo loans é suficiente para esse
teste unitário; o carregamento e a gravação reais de JsonData são testes de componente separados.
Cenário do exercício
Os testes de serviços não validam diretamente a busca do repositório. Adicione testes que diferenciem um empréstimo existente de um ausente sem modificar o JSON da fixture.
Tarefa 1 - Inspecione e colete
python -m pytest --collect-only -q tests
python -m pytest -q tests
Registre os nomes e as contagens reais dos testes. Leia infrastructure/json_loan_repository.py,
application_core/entities/loan.py e os testes de serviços antes de adicionar qualquer coisa.
Tarefa 2 - Defina casos e um ponto restrito de isolamento
| Caso | Asserção |
|---|---|
| ID inteiro correspondente | O empréstimo real correspondente é retornado |
| ID ausente | None, não um novo empréstimo vazio |
| Coleção vazia | None |
| Consulta somente leitura | Ordem e elementos da coleção inalterados |
ID string, como "1" |
Caracterize o comportamento atual; não presuma coerção |
Exemplo de ponto de isolamento:
from types import SimpleNamespace
from infrastructure.json_loan_repository import JsonLoanRepository
# Supply actual Loan objects constructed with the fields required by the fixture.
data = SimpleNamespace(loans=[])
repository = JsonLoanRepository(data)
assert repository.get_loan(999) is None
Isso isola o método do repositório, não o analisador JSON. Não o apresente como um teste de integração com o sistema de arquivos.
Tarefa 3 - Planeje e escreva os testes
Pergunte:
Inspect get_loan and the Loan entity. Propose found/missing/empty/non-mutation cases.
Use the real repository and a minimal data object; do not mock get_loan itself.
Distinguish current wrong-type behavior from a new validation requirement.
- Revise o plano e adicione
tests/test_json_loan_repository.py. - Use fixtures do pytest para evitar configuração duplicada quando isso melhorar a clareza.
- Faça asserções sobre campos ou identidade de objetos conforme o contrato atual exigir.
- Mantenha as datas controladas e os comportamentos de serviços sem relação com a tarefa fora do escopo.
- Não adicione manipuladores genéricos de exceção para fazer os testes passarem.
Tarefa 4 - Comprove a detecção
python -m pytest -q tests/test_json_loan_repository.py
python -m pytest -q tests
- Confirme que o arquivo selecionado realmente contém testes coletados.
- Temporariamente, faça uma asserção de ID encontrado esperar
None; verifique a falha. - Restaure a asserção e execute novamente.
- Use o Explorador de Testes somente após selecionar o mesmo interpretador e a mesma raiz de importação.
- Registre as limitações: estes testes não comprovam carregamento de JSON, persistência, segurança nem todo o comportamento do serviço de empréstimos.
Verifique seu trabalho
- Os casos encontrado/ausente/vazio exercitam o repositório real.
- A busca não modifica a coleção de origem.
- A asserção incorreta falha com código de saída diferente de zero.
- Interpretador, diretório de trabalho e comandos são reproduzíveis.
- Nenhum dado JSON real ou outro projeto foi modificado.
Solução de problemas
ModuleNotFoundError geralmente significa raiz ou interpretador incorreto.
0 tests collected não é sucesso. Se um mock retorna exatamente o que você configurou,
pergunte se o método sob teste chegou a ser executado.
Prática independente
Adicione um teste de componente para JSON corrompido usando uma fixture temporária e caracterize o comportamento real do carregador. Não presuma silenciosamente que um erro impresso é uma exceção.
Restauração
Restaure somente seu novo arquivo de teste e a configuração local de testes. Feche o workspace descartável; mantenha os interpretadores compartilhados intactos.