Solucionar problemas de cobertura de código
Aplica-se a: Visual Studio 2022
A ferramenta de análise de cobertura de código no Visual Studio coleta dados para assemblies nativos e gerenciados ( arquivos.dll ou .exe ). No entanto, em alguns casos, a janela Resultados da Cobertura de Código exibe um erro semelhante a "Resultados vazios gerados: ....". Este artigo ajuda você a solucionar problemas e resolve os vários motivos pelos quais você pode estar encontrando resultados vazios.
O que você deve ver?
Se você escolher um comando Analisar Cobertura de Código no menu Teste e, se o build e os testes forem executados com êxito, você deverá ver uma lista de resultados na janela Cobertura de Código . Talvez você precise expandir os itens para ver os detalhes.
Para obter mais informações, consulte Usar a cobertura de código para determinar quanto código está sendo testado.
Possíveis motivos para não ver resultados ou resultados antigos
Você não está usando a edição certa do Visual Studio
Você precisa de Visual Studio Enterprise.
Nenhum teste foi executado
Análise
Verifique a janela de saída. Na lista Mostrar Saída na lista suspensa, escolha Testes. Confira se há algum aviso ou erro registrado.
Explicação
A análise de cobertura de código é feita enquanto os testes são executados. Ele inclui apenas assemblies carregados na memória quando os testes são executados. Se nenhum dos testes for executado, não haverá nada para a cobertura de código relatar.
Resolução
Em Testar Explorer, selecione Executar Tudo para verificar se os testes são executados com êxito. Corrija quaisquer falhas antes de usar a Cobertura de Código de Análise.
Você está olhando para um resultado anterior
Quando você modifica e executa novamente seus testes, um resultado de cobertura de código anterior ainda pode ser visível, incluindo a coloração de código daquela execução antiga. Siga estas etapas para resolver o problema:
- Execute Analisar cobertura de código.
- Verifique se você selecionou o conjunto de resultados mais recente na janela Resultados da Cobertura de Código .
Os arquivos .pdb (símbolo) não estão disponíveis
Análise
Abra a pasta de destino do compilador (normalmente bin\debug) e verifique se, para cada assembly, há um arquivo .pdb no mesmo diretório que o arquivo.dll ou .exe .
Explicação
O mecanismo de cobertura de código exige que cada assembly tenha seu arquivo .pdb associado acessível durante a execução do teste. Se não houver nenhum arquivo .pdb para um assembly específico, o assembly não será analisado.
O arquivo .pdb deve ser gerado do mesmo build que os arquivos .dll ou .exe .
Resolução
Verifique se as configurações de build geram o arquivo .pdb .
Se os arquivos .pdb não forem atualizados quando o projeto for criado, abra as propriedades do projeto, selecione a página Compilar , escolha Avançado e inspecione Informações de Depuração.
No Visual Studio 2022 e versões posteriores, para projetos em C# direcionados ao .NET Core ou ao .NET 5+, abra as propriedades do projeto, selecione a guia Compilar , escolha Geral e inspecione símbolos de Depuração.
Para projetos C++, verifique se os arquivos .pdb gerados têm informações completas de depuração. Abra as propriedades do projeto e verifique se aDepuração> do Vinculador>Gerar Informações de Depuração está definida como Gerar Informações de Depuração otimizadas para compartilhamento e publicação (/DEBUG:FULL).
Se os arquivos .pdb e .dll ou .exe estiverem em locais diferentes, copie o arquivo .pdb para o mesmo diretório. Também é possível configurar o mecanismo de cobertura de código para pesquisar arquivos .pdb em outro local. Para obter mais informações, consulte Personalizar a análise de cobertura de código.
Um binário instrumentado ou otimizado é usado
Análise
Determine se o binário passou por qualquer forma de otimização avançada, como otimização guiada por perfil ou foi instrumentado por uma ferramenta de criação de perfil, como vsinstr.exe ou vsperfmon.exe.
Explicação
Se um assembly já tiver sido instrumentado ou otimizado por outra ferramenta de criação de perfil, o assembly será omitido da análise de cobertura de código. A análise de cobertura de código não pode ser executada nesses assemblies.
Resolução
Desative a otimização e use um novo build.
Código não é gerenciado (.NET) ou código nativo (C++)
Análise
Determine se você está executando alguns testes no código gerenciado ou C++.
Explicação
A análise de cobertura de código no Visual Studio está disponível apenas no código gerenciado e nativo (C++). Se você estiver trabalhando com ferramentas de terceiros, alguns ou todos os códigos poderão ser executados em uma plataforma diferente.
Resolução
Nenhum disponível.
O nome do projeto inclui 'DataCollector'
Os projetos que usam o DataCollector no nome do projeto não serão identificados pela cobertura de código.
O Assembly foi instalado pela NGen
Análise
Determine se o assembly é carregado do cache de imagem nativo.
Explicação
Por motivos de desempenho, os assemblies de imagem nativos não são analisados. Para obter mais informações, consulte Ngen.exe (Gerador de Imagem Nativa).
Resolução
Use uma versão MSIL do assembly. Não processe com o NGen.
O arquivo .runsettings personalizado tem problemas de sintaxe
Análise
Se você estiver usando um arquivo .runsettings personalizado, ele poderá conter um erro de sintaxe. A cobertura de código não é executada e a janela de cobertura de código não é aberta no final da execução do teste ou mostra resultados antigos.
Explicação
Você pode executar seus testes de unidade com um arquivo .runsettings personalizado para configurar opções de cobertura de código. As opções permitem incluir ou excluir arquivos. Para obter mais informações, consulte Personalizar a análise de cobertura de código.
Resolução
Há dois tipos possíveis de falhas:
Erro XML
Abra o arquivo .runsettings no editor do Visual Studio XML. Procure indicações de erro.
Erro de expressão regular
Cada cadeia de caracteres no arquivo é uma expressão regular. Examine cada um deles para obter erros e, em particular, procure:
- Parênteses incompatíveis (...) ou parênteses não paisagizados \(...\). Se você quiser corresponder a um parêntese na cadeia de caracteres de pesquisa, você deve escapar dela. Por exemplo, para corresponder a um uso de função:
.*MyFunction\(double\)
- Asterisco ou mais no início de uma expressão. Para corresponder a qualquer cadeia de caracteres, use um ponto seguido de um asterisco:
.*
- Parênteses incompatíveis (...) ou parênteses não paisagizados \(...\). Se você quiser corresponder a um parêntese na cadeia de caracteres de pesquisa, você deve escapar dela. Por exemplo, para corresponder a um uso de função:
Arquivo .runsettings personalizado com exclusões incorretas
Análise
Se você estiver usando um arquivo .runsettings personalizado, verifique se ele inclui o assembly.
Explicação
Você pode executar seus testes de unidade com um arquivo .runsettings personalizado para configurar opções de cobertura de código. As opções permitem incluir ou excluir arquivos. Para obter mais informações, consulte Personalizar a análise de cobertura de código.
Resolução
Remova todos os Include
nós do arquivo .runsettings e remova todos os Exclude
nós. Se isso corrigir o problema, coloque-os novamente em estágios.
Verifique se o nó DataCollectors especifica a Cobertura de Código. Compare-o com o exemplo em Personalizar a análise de cobertura de código.
Algum código é sempre mostrado como não coberto
O código de inicialização em DLLs nativos é executado antes da instrumentação
Análise
No código nativo vinculado estaticamente, parte da função de inicialização DllMain e do código que ele chama às vezes é mostrada como não coberta, mesmo que o código tenha sido executado.
Explicação
A ferramenta de cobertura de código funciona inserindo instrumentação em um assembly pouco antes do aplicativo começar a ser executado. Em qualquer assembly carregado com antecedência, o código de inicialização no DllMain é executado assim que o assembly é carregado e antes da execução do aplicativo. Esse código parece não estar coberto, o que normalmente se aplica a assemblies carregados estaticamente.
Resolução
Nenhuma.