Partilhar via


Solução de problemas de cobertura de código

Aplica-se a: Visual Studio

A ferramenta de análise da 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 resolver 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. Você talvez tenha que expandir os itens para ver os detalhes.

Captura de tela que mostra os resultados da cobertura de código com coloração.

Para obter mais informações, confira Usar a cobertura de código para determinar quanto do código está sendo testado.

Possíveis motivos para não ver resultados ou ver resultados anteriores

Você não está usando a edição correta do Visual Studio

Você precisa do Visual Studio Enterprise.

Nenhum teste foi executado

Análise

Verifique a janela de saída. Na lista suspensa Mostrar Saída de, escolha Testes. Verifique se existe algum aviso ou erro registrado em log.

Explicação

A análise de cobertura de código é feita durante a execução de testes. Ela inclui apenas assemblies carregados na memória durante a execução dos testes. Se nenhum dos testes for executado, não haverá nada para a cobertura de código a ser reportado.

Resolução

No Gerenciador de Testes, selecione Executar Tudo para verificar se os testes foram executados com êxito. Corrija todas as falhas antes de usar Analisar Cobertura de Código.

Você está olhando um resultado anterior

Quando você modificar e reexecutar os testes, um resultado anterior da cobertura de código poderá permanecer visível, inclusive a coloração de código com base nessa execução anterior. Siga estas etapas para resolver o problema:

  1. Executar Analisar Cobertura de Código.
  2. Não se esqueça de selecionar 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 de compilação (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 requer 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 precisa ser gerado do mesmo build dos 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 C# direcionados ao .NET Core ou .NET 5+, abra as propriedades do projeto, selecione a guia Compilar , escolha Geral e inspecione os 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 Vinculador>Depuração>Gerar Informações de Depuração está definida como Gerar Informações de Depuração otimizada 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, confira 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 alguma 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 realizada nesses assemblies.

Resolução

Desative a otimização e use uma nova compilação.

O código não é gerenciado (.NET) ou nativo (C++)

Análise

Determine se você está executando alguns testes em 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, um ou todo o código poderá ser executado em uma plataforma diferente.

Resolução

Não disponível.

O nome do projeto inclui 'DataCollector'

Projetos que usam DataCollector no nome do projeto não serão identificados pela cobertura de código.

O assembly foi instalado por NGen

Análise

Determine se o assembly é carregado do cache de imagem nativa.

Explicação

Por motivos de desempenho, os assemblies de imagem nativa não são analisados. Para obter mais informações, consulte Ngen.exe (Gerador de Imagens Nativas).

Resolução

Use uma versão MSIL do assembly. Não o processe com 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, confira Personalizar a análise de cobertura de código.

Resolução

Existem dois tipos possíveis de falhas:

  • Erro de XML

    Abra o arquivo .runsettings no editor XML do Visual Studio. Procure indicações de erro.

  • Erro na expressão regular

    Cada cadeia de caracteres no arquivo é uma expressão regular. Examine cada um em busca de erros e, em especial, procure:

    • Parênteses incompatíveis (...) ou parênteses sem escape \… (\). Se quiser corresponder um parêntese na cadeia de pesquisa, você deverá usar o escape. Por exemplo, para realizar a correspondência de uma função, use: .*MyFunction\(double\)
    • Asterisco ou sinal de adição no início de uma expressão. Para comparar qualquer cadeia de caracteres, use um ponto seguido de um asterisco: .*

Arquivo .runsettings personalizado com exclusões incorretas

Análise

Se você estiver usando um arquivo .runsettings personalizado, verifique se ele inclui seu 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, confira Personalizar a análise de cobertura de código.

Resolução

Remova todos os Include nós do arquivo .runsettings e, em seguida, remova todos os Exclude nós. Se isso corrigir o problema, recoloque-os em estágios.

Verifique se o nó DataCollectors especifica a Cobertura de Código. Compare-o com a amostra contida em Personalizar a análise de cobertura de código.

Um código é sempre mostrado como não coberto

O código de inicialização em DLLs nativas é executado antes da instrumentação

Análise

No código nativo vinculado estaticamente, a função de inicialização DllMain e o código que ele chama às vezes são mostrados como não cobertos, mesmo que o código tenha sido executado.

Explicação

A ferramenta de cobertura de código funciona inserindo-se a instrumentação em um assembly pouco antes do início da execução do aplicativo. Em qualquer assembly carregado anteriormente, o código de inicialização em DllMain é executado assim que o assembly é carregado e antes da execução do aplicativo. Esse código aparentemente não foi abordado, o que, em geral, se aplica aos assemblies carregados estaticamente.

Resolução

Nenhum.

Referências