Solución de problemas de cobertura de código

              Aplicable a: Visual Studio

La herramienta de análisis de cobertura de código de Visual Studio recopila datos para ensamblados nativos y administrados ( archivos.dll o .exe ). Sin embargo, en algunos casos, la ventana Resultados de cobertura de código muestra un error similar a "Resultados vacíos generados: ....". Este artículo le ayuda a solucionar y resolver los diversos motivos por los que puede encontrar resultados vacíos.

¿Qué debería ver?

Si elige un comando Analizar cobertura de código en el menú Prueba y, si la compilación y las pruebas se ejecutan correctamente, debería ver una lista de resultados en la ventana Cobertura de código . Es posible que tenga que expandir los elementos para ver los detalles.

Captura de pantalla que muestra los resultados de la cobertura de código con coloración.

Para obtener más información, consulte Uso de la cobertura de código para determinar la cantidad de código que se está probando.

Posibles motivos para no ver resultados o resultados antiguos

No está usando la edición correcta de Visual Studio.

Necesitas Visual Studio Enterprise.

No se ejecutaron pruebas

Análisis

Compruebe la ventana de salida. En la lista desplegable Mostrar salida de , elija Pruebas. Compruebe si hay advertencias o errores registrados.

Explicación

El análisis de cobertura de código se realiza mientras se ejecutan las pruebas. Solo incluye ensamblados que se cargan en la memoria cuando se ejecutan las pruebas. Si no se ejecuta ninguna de las pruebas, no hay nada que informar sobre la cobertura de código.

Resolución

En el Explorador de pruebas, seleccione Ejecutar todo para comprobar que las pruebas se ejecutan correctamente. Corrija los errores antes de usar Analizar cobertura de código.

Está viendo un resultado anterior

Al modificar y volver a ejecutar las pruebas, un resultado de cobertura de código anterior puede seguir siendo visible, incluido el color del código de esa ejecución anterior. Siga estos pasos para solucionar el problema:

  1. Ejecute Analizar cobertura de código.
  2. Asegúrese de que ha seleccionado el conjunto de resultados más reciente en la ventana Resultados de cobertura de código .

Los archivos .pdb (símbolo) no están disponibles

Análisis

Abra la carpeta de destino de compilación (normalmente bin\debug) y compruebe que, para cada ensamblado, hay un archivo .pdb en el mismo directorio que el archivo.dll o .exe .

Explicación

El motor de cobertura de código requiere que cada ensamblado tenga su archivo .pdb asociado accesible durante la ejecución de la prueba. Si no hay ningún archivo .pdb para un ensamblado determinado, el ensamblado no se analiza.

El archivo .pdb debe generarse a partir de la misma compilación que los archivos .dll o .exe .

Resolución

Asegúrese de que la configuración de compilación genere el archivo .pdb .

  • Si los archivos .pdb no se actualizan cuando se compila el proyecto, abra las propiedades del proyecto, seleccione la página Compilar , elija Avanzadas e inspeccione Información de depuración.

  • En Visual Studio 2022 y versiones posteriores, para proyectos de C# destinados a .NET Core o .NET 5+, abra las propiedades del proyecto, seleccione la pestaña Compilar , elija General e inspeccione los símbolos de depuración.

  • Para los proyectos de C++, asegúrese de que los archivos .pdb generados tengan información de depuración completa. Abra las propiedades del proyecto y compruebe que Ladepuracióndel enlazador>generar información de depuración> está establecida en Generar información de depuración optimizada para compartir y publicar (/DEBUG:FULL).

Si los archivos .pdb y .dll o .exe están en lugares diferentes, copie el archivo .pdb en el mismo directorio. También es posible configurar el motor de cobertura de código para buscar archivos .pdb en otra ubicación. Para obtener más información, consulte Personalización del análisis de cobertura de código.

Se usa un binario instrumentado o optimizado

Análisis

Determine si el binario ha sufrido algún tipo de optimización avanzada, como la optimización guiada por perfiles, o si ha sido instrumentado por una herramienta de generación de perfiles como vsinstr.exe o vsperfmon.exe.

Explicación

Si otra herramienta de generación de perfiles ya ha instrumentado o optimizado un ensamblado, el ensamblado se omite del análisis de cobertura de código. El análisis de cobertura de código no se puede realizar en estos ensamblados.

Resolución

Desactive la optimización y use una nueva compilación.

El código no está administrado (.NET) ni nativo (C++)

Análisis

Determine si está ejecutando algunas pruebas en código administrado o en C++.

Explicación

El análisis de cobertura de código en Visual Studio solo está disponible en código administrado y nativo (C++). Si trabaja con herramientas de terceros, es posible que parte o todo el código se ejecute en una plataforma diferente.

Resolución

Ninguno disponible.

El nombre del proyecto incluye "DataCollector"

Los proyectos que usan DataCollector en el nombre del proyecto no se identificarán por cobertura de código.

NGen ha instalado el ensamblado

Análisis

Determine si el ensamblado se carga desde la caché de imágenes nativas.

Explicación

Por motivos de rendimiento, los ensamblados de imágenes nativas no se analizan. Para obtener más información, vea Ngen.exe (Generador de imágenes nativas).

Resolución

Use una versión MSIL del ensamblado. No lo procese con NGen.

El archivo .runsettings personalizado tiene problemas de sintaxis

Análisis

Si usa un archivo .runsettings personalizado, podría contener un error de sintaxis. La cobertura de código no se ejecuta y la ventana de cobertura de código no se abre al final de la ejecución de la prueba o muestra resultados antiguos.

Explicación

Puede ejecutar las pruebas unitarias con un archivo .runsettings personalizado para configurar las opciones de cobertura de código. Las opciones permiten incluir o excluir archivos. Para obtener más información, consulte Personalización del análisis de cobertura de código.

Resolución

Hay dos tipos posibles de errores:

  • Error XML

    Abra el archivo .runsettings en el editor XML de Visual Studio. Busque indicaciones de error.

  • Error de expresión regular

    Cada cadena del archivo es una expresión regular. Revise cada uno de los errores y, en particular, busque lo siguiente:

    • Paréntesis no coincidentes (...) o paréntesis sincapa \(...\). Si desea coincidir con un paréntesis en la cadena de búsqueda, debe escaparlo. Por ejemplo, para que coincida con una función, use: .*MyFunction\(double\)
    • Asterisco o signo más al principio de una expresión. Para hacer coincidir cualquier cadena de caracteres, use un punto seguido de un asterisco: .*

Archivo .runsettings personalizado con exclusiones incorrectas

Análisis

Si usa un archivo .runsettings personalizado, asegúrese de que incluye el ensamblado.

Explicación

Puede ejecutar las pruebas unitarias con un archivo .runsettings personalizado para configurar las opciones de cobertura de código. Las opciones permiten incluir o excluir archivos. Para obtener más información, consulte Personalización del análisis de cobertura de código.

Resolución

Quite todos los Include nodos del archivo .runsettings y, a continuación, quite todos los Exclude nodos. Si corrige el problema, vuelva a colocarlos en fases.

Asegúrese de que el nodo DataCollectors especifica Cobertura de código. Compárelo con el ejemplo de Personalización del análisis de cobertura de código.

Algunos códigos siempre se muestran como no cubiertos

El código de inicialización en archivos DLL nativos se ejecuta antes de la instrumentación

Análisis

En el código nativo vinculado estáticamente, parte de la función de inicialización DllMain y el código al que llama a veces se muestran como no cubiertos, aunque el código se haya ejecutado.

Explicación

La herramienta de cobertura de código funciona insertando instrumentación en un ensamblado justo antes de que la aplicación empiece a ejecutarse. En cualquier ensamblado cargado de antemano, el código de inicialización de DllMain se ejecuta en cuanto se carga el ensamblado y antes de que se ejecute la aplicación. Ese código parece no estar cubierto, lo que normalmente se aplica a ensamblados cargados estáticamente.

Resolución

Ninguno.

Referencias