Compartir vía


Solucionar problemas de cobertura de código

Se aplica 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 los diversos motivos por los que puede encontrarse con resultados vacíos.

¿Qué debería ver?

Si se 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 cobertura de código con coloreado.

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

Causas posibles para no ver ningún resultado o ver resultados antiguos

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

Necesita Visual Studio Enterprise.

No se ejecutó ninguna prueba

Análisis

Compruebe la ventana de salida. En la lista desplegable Mostrar resultados desde, 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 los ensamblados cargados en memoria cuando se ejecutan las pruebas. Si no se ejecuta ninguna de las pruebas, no hay nada que notificar con respecto a la cobertura de código.

Resolución

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

Está viendo un resultado anterior

Cuando se modifican y se vuelven a ejecutar las pruebas, todavía puede estar visible un resultado de cobertura de código anterior, incluido el color del código de esa ejecución anterior. Siga estos pasos para resolver 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 de 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 todos los ensamblados tengan accesible su archivo .pdb asociado durante la ejecución de pruebas. Si no hay ningún archivo .pdb para un ensamblado determinado, el ensamblado no se analiza.

El archivo .pdb se debe generar 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 La 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 símbolos de depuración.

  • En el caso de proyectos C++, asegúrese de que los archivos .pdb generados tienen información de depuración completa. Abra las propiedades del proyecto y compruebe que la opción Enlazador>Depurar>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 distintos lugares, 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, vea Personalizar el análisis de cobertura de código.

Se usa un binario instrumentado o optimizado

Análisis

Determine si el binario se ha sometido a cualquier forma de optimización avanzada, como la optimización guiada por perfiles, o se ha instrumentado mediante 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 u optimizado un ensamblado, este se omitirá del análisis de cobertura de código. El análisis de cobertura de código no se puede realizar en dichos ensamblados.

Resolución

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

El código no se administra (.NET) ni el código nativo (C++)

Análisis

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

Explicación

El análisis de cobertura de código de Visual Studio solo está disponible en código administrado y nativo (C++). Si trabaja con herramientas de terceros, puede que parte del código, o todo, 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 mediante la 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 el artículo sobre 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 pruebas o muestra los 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, vea Personalizar el análisis de cobertura de código.

Resolución

Hay dos posibles tipos de errores:

  • Error de XML

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

  • Error de expresión regular

    Cada cadena del archivo es una expresión regular. Revise cada una de ellas en busca de errores y, en particular, busque:

    • Paréntesis no coincidentes (...) o paréntesis sin escape \(...\). Si desea asociar un paréntesis en la cadena de búsqueda, debe indicar su secuencia de escape. Por ejemplo, para hacer coincidir una función, use: .*MyFunction\(double\)
    • Asterisco o signo más al principio de una expresión. Para asociar 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, vea Personalizar el 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 eso corrige el problema, vuelva a colocarlos en fases.

Asegúrese de que el nodo DataCollectors especifica la cobertura de código. Compárelo con el ejemplo de Personalizar el análisis de cobertura de código.

Siempre se muestra algún código como no cubierto

El código de inicialización de 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 se muestran a veces como no cubiertos, aunque se haya ejecutado el código.

Explicación

La herramienta de cobertura de código funciona insertando la instrumentación en un ensamblado justo antes de que la aplicación comience a ejecutarse. En cualquier ensamblado cargado con antelación, el código de inicialización de DllMain se ejecuta tan pronto como se carga el ensamblado y antes de que se ejecute la aplicación. Ese código aparece como no cubierto, que normalmente se aplica a los ensamblados cargados estáticamente.

Resolución

Ninguno.

Referencias