Awesome CopilotAdventures

Documentação do produto verificada

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

Poucos blocos de amostra entram em um módulo de função enquanto instrumentos separados comparam suas saídas.

Ilustração conceitual original (SVG)

Diferencie a coleta de testes de asserções úteis.

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.
  1. Revise o plano e adicione tests/test_json_loan_repository.py.
  2. Use fixtures do pytest para evitar configuração duplicada quando isso melhorar a clareza.
  3. Faça asserções sobre campos ou identidade de objetos conforme o contrato atual exigir.
  4. Mantenha as datas controladas e os comportamentos de serviços sem relação com a tarefa fora do escopo.
  5. 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
  1. Confirme que o arquivo selecionado realmente contém testes coletados.
  2. Temporariamente, faça uma asserção de ID encontrado esperar None; verifique a falha.
  3. Restaure a asserção e execute novamente.
  4. Use o Explorador de Testes somente após selecionar o mesmo interpretador e a mesma raiz de importação.
  5. 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.

Referências oficiais

Buscar

Busca em português do Brasil. Os caminhos e os exemplos executáveis mantêm o texto original.