Awesome CopilotAdventures

Documentação do produto verificada

Desenvolva testes xUnit capazes de distinguir comportamentos com o Copilot

Um teste pode passar comprovando muito pouco. Verifique o comportamento do repositório de produção em vez de testar uma função auxiliar definida apenas dentro do teste.

Resumo do laboratório

Duas bandejas de amostras se conectam por um módulo de repositório ao armazenamento, a uma lupa de verificação e a uma bandeja de resultados vazia.

Ilustração conceitual original (SVG)

Teste o comportamento do armazenamento por meio do repositório de produção.

Em resumo Sua rota
Nível e tempo 300; 65 minutos (estimativa de facilitação)
Ação inicial Adicione um teste de componente com ID encontrado e verifique as entidades preenchidas por meio de asserções.
Materiais do aluno Baixe 04-xunit.zip
Workspace Abra a raiz do kit extraído; execute a baseline de . relativa a essa raiz
Verificação inicial esperada Os testes fornecidos passam. Os novos requisitos de funcionalidade ainda precisam de testes próprios.
Ajuda de configuração Baixe, extraia, Git local e GitHub opcional

[!NOTE] Simular o método sob teste não pode provar que a implementação dele funciona.

Conceitos · Primeira tarefa · Lista de evidências · Redefinir

Objetivos de aprendizagem

  • Diferencie testes unitários, de componente e de interface.
  • Use as convenções existentes de xUnit e NSubstitute.
  • Isole os dados do sistema de arquivos e comprove a detecção de falhas.

Antes de começar

Prepare 04-xunit com a configuração comum. Use a fixture de xUnit incluída. Não substitua xUnit por outro framework nem instale pacotes globalmente.

Conceitos e casos de uso

Tipo de teste Objeto Ponto adequado de isolamento
Teste unitário de serviço Decisão sobre empréstimo/associação Substituto do contrato de repositório
Teste de componente de repositório Carregar/preencher registros JSON reais Arquivos temporários e JsonLoanRepository real
Verificação do console Entrada e apresentação Cenário manual com roteiro

O projeto de teste existente referencia ApplicationCore. Testar Infrastructure exige uma referência explícita de projeto; um GetLoan simulado não consegue testar sua própria implementação.

Cenário do exercício

Adicione testes de repositório para GetLoan: encontrado, ausente e relações preenchidas. Não adicione regras não documentadas de conversão de tipos a uma API de IDs inteiros.

Tarefa 1 - Inspecione e descubra a linha de base

dotnet test tests/UnitTests/UnitTests.csproj -m:1 -p:UseSharedCompilation=false --list-tests
dotnet test tests/UnitTests/UnitTests.csproj -m:1 -p:UseSharedCompilation=false

Leia JsonLoanRepository, JsonData, os testes de serviços existentes e LoanFactory. Explique quais testes usam substitutos e quais precisam do comportamento real de armazenamento.

Tarefa 2 - Projete os casos antes de gerar testes

Caso Asserção
ID existente Os campos do empréstimo retornado correspondem à fixture
ID ausente O resultado é null; nenhum registro sintético de sucesso
Relações encontradas Usuário, exemplar físico, livro e autor corretos
Arquivo de empréstimos vazio Nenhuma correspondência falsa
Consulta somente leitura Os arquivos de origem permanecem inalterados
Arquivo ausente/corrompido Caracterize o comportamento atual do carregador; não invente uma alternativa

Use um diretório temporário na unidade de trabalho com os cinco arquivos JSON e caminhos de configuração apontando para ele. Evite gravar no src/Library.Console/Json distribuído.

Tarefa 3 - Planeje e gere um teste

Pergunte:

Trace GetLoan and JsonData.EnsureDataLoaded. What must a repository component test
construct? Cite the constructor and configuration keys. Do not mock the method
under test or create a replacement validation function in the test.

Planeje o ciclo de vida da fixture, os dados esperados e a limpeza. Depois, em Agent:

  1. Adicione a referência ao projeto Infrastructure no projeto de teste.
  2. Crie um teste de componente para ID encontrado usando o repositório real.
  3. Faça asserções sobre campos/relações, não apenas “não nulo”.
  4. Use um teste que retorne Task e aguarde o método.
  5. Adicione os casos restantes sem duplicar a configuração excessivamente.

Tarefa 4 - Valide a qualidade dos testes

  1. Execute os novos testes filtrados e depois a suíte da fixture:

    dotnet test tests/UnitTests/UnitTests.csproj -m:1 -p:UseSharedCompilation=false --filter "FullyQualifiedName~JsonLoanRepository"
    dotnet test tests/UnitTests/UnitTests.csproj -m:1 -p:UseSharedCompilation=false
    
  2. Confirme que os nomes descobertos correspondem aos testes pretendidos. Ajuste o filtro para o nome real da classe em vez de aceitar zero correspondências.

  3. Altere deliberadamente o ID esperado. Verifique a falha e restaure-o.

  4. Confirme que os dados temporários são removidos sem excluir o diretório de outro teste.

  5. Opcional: execute o coletor de cobertura existente. Relate a métrica real e seu escopo; uma porcentagem não comprova todos os requisitos.

Verifique seu trabalho

  • Os testes exercitam o repositório de produção.
  • O método assíncrono é aguardado.
  • Campos e referências preenchidas são verificados por asserções.
  • Os arquivos estão isolados e consultas somente leitura os deixam inalterados.
  • Uma asserção incorreta produz saída diferente de zero.

Solução de problemas

Um namespace Infrastructure não resolvido geralmente significa uma referência de projeto ausente. Um arquivo não encontrado costuma significar que a configuração aponta para a fixture de origem ou para o diretório de trabalho errado. Não corrija isso copiando caminhos absolutos específicos da máquina para o código.

Prática independente

Teste UpdateLoan para um ID conhecido e documente o que acontece com um ID ausente. Separe a caracterização de uma alteração proposta na semântica de ID ausente.

Restauração

Restaure somente as alterações de testes/referências de projeto no projeto copiado. Remova seu próprio diretório temporário após verificar o caminho. Mantenha as fixtures JSON originais inalteradas.

Referências oficiais

Buscar

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