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

Ilustração conceitual original (SVG)
| 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:
- Adicione a referência ao projeto Infrastructure no projeto de teste.
- Crie um teste de componente para ID encontrado usando o repositório real.
- Faça asserções sobre campos/relações, não apenas “não nulo”.
- Use um teste que retorne
Taske aguarde o método. - Adicione os casos restantes sem duplicar a configuração excessivamente.
Tarefa 4 - Valide a qualidade dos testes
-
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 -
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.
-
Altere deliberadamente o ID esperado. Verifique a falha e restaure-o.
-
Confirme que os dados temporários são removidos sem excluir o diretório de outro teste.
-
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.