Solução de problemas de cobertura de código
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 de Cobertura de Código exibe um erro semelhante a "Esvaziar resultados gerados: ...." Existem vários motivos possíveis pelos quais isso pode acontecer.Este tópico deve ajudar a resolver esses problemas.
O que você deve ver
Se escolher um comando Analisar Cobertura de Código no menu Teste e se a compilação 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.
Para obter mais informações, consulte Usando cobertura de código para determinar quanto código está sendo testado.
Possíveis motivos para não ver resultados ou ver resultados anteriores
Você tem a edição certa do Visual Studio?
Você precisa do Visual Studio Ultimate ou do Visual Studio Premium.
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, escolha 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á observou 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.
Executar Analisar Cobertura de Código.
Não se esqueça de selecionar o conjunto de resultados mais recente na janela de resultados 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, existe um arquivo .pdb no mesmo diretório do arquivo .dll ou .exe.Explicação
O mecanismo de cobertura de código exige que todo assembly tenha seu arquivo .pdb associado acessível durante a execução do teste.Se não houver arquivo .pdb para um determinado assembly, ele não será analisado.O arquivo .pdb deve ser gerado com base na mesma compilação dos arquivos .dll ou .exe.
Resolução
Verifique se as configurações de compilação geram o arquivo .pdb.Se os arquivos .pdb não forem atualizados quando o projeto for compilado, abra as propriedades do projeto, selecione a página Compilação, escolha Avançado e inspecione Informações de Depuração.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 procurar arquivos .pdb em outro local.Para obter mais informações, consulte Personalizando análise de cobertura de código.
Usando um binário instrumentado ou otimizado
Análise
Determine se o binário passou por algum formulário de otimização avançada como, por exemplo, 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
Verifique se você está executando alguns testes em código gerenciado ou do 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
Nenhum disponível.
O assembly foi instalado por NGen
Análise
Verifique se o assembly não é carregado com base no 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.
Arquivo .runsettings personalizado com sintaxe incorreta
Análise
Se você estiver usando um arquivo .runsettings personalizado, ele poderá conter um erro de sintaxe.Isso resulta na ausência de execução de cobertura de código.A janela de cobertura de código não é aberta ao final da execução de teste ou mostra resultados anteriores.
Explicação
É possível executar 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 Personalizando 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.Revise 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 comparar 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 o assembly.Explicação
É possível executar 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 Personalizando análise de cobertura de código.Resolução
Remova todos os nós Include do arquivo .runsettings e, em seguida, descarte todos os nós Exclude.Se isso corrigir o problema, recoloque-os em estágios.Verifique se o nó DataCollectors especifica a Cobertura de Código.Compare-o com o exemplo em Personalizando 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 chamado à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 antes, 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 estará coberto.Normalmente, isso se aplica aos assemblies carregados estaticamente.
Resolução
Nenhum.
Consulte também
Outros recursos
Usando cobertura de código para determinar quanto código está sendo testado