Partager via


Résoudre les problèmes liés à la couverture du code

S’applique à : Visual Studio

L’outil d’analyse de couverture du code dans Visual Studio collecte des données pour les assemblys natifs et managés (fichiers .dll ou .exe). Toutefois, dans certains cas, la fenêtre Résultats de couverture du code affiche une erreur similaire à « Résultats vides générés : .... ». Cet article vous aide à résoudre et résoudre les différentes raisons pour lesquelles vous rencontrerez peut-être des résultats vides.

Qu’est-ce que tu devrais voir ?

Si vous choisissez une commande Analyser la couverture du code dans le menu Test, et que la génération et les tests s’exécutent correctement, une liste de résultats doit s’afficher dans la fenêtre Couverture du code. Vous devrez peut-être développer les éléments pour afficher les détails.

Capture d’écran montrant les résultats de couverture du code avec coloration.

Pour plus d’informations, consultez Utiliser la couverture du code pour déterminer la quantité de code testé.

Raisons pouvant justifier qu'aucun résultat ne s'affichent, ou que seuls des résultats anciens s'affichent

Vous n’utilisez pas la bonne édition de Visual Studio

Vous avez besoin de Visual Studio Enterprise.

Aucun test n'a été exécuté

Analyse

Vérifiez votre fenêtre de sortie. Dans la liste déroulante Afficher la sortie à partir de, choisissez Tests. Vérifiez si des avertissements ou des erreurs sont enregistrés.

Explication

L'analyse de la couverture du code est effectuée pendant l'exécution des tests. Elle inclut uniquement les assemblys chargés en mémoire lorsque les tests s'exécutent. Si aucun des tests n’est exécuté, la couverture du code n’a rien a signaler.

Solution

Dans l’Explorateur de tests, sélectionnez Exécuter tout pour vérifier que les tests s’exécutent correctement. Corrigez toutes les erreurs avant d’utiliser Analyser la couverture du code.

Vous consultez un résultat antérieur

Quand vous modifiez et que vous réexécutez vos tests, le résultat d’une couverture du code antérieure peut être toujours visible, notamment la coloration du code de cette exécution antérieure. Procédez comme suit pour résoudre le problème :

  1. Exécutez Analyser la couverture du code.
  2. Vérifiez que vous avez sélectionné le jeu de résultats le plus récent dans la fenêtre Résultats de la couverture du code.

Les fichiers .pdb (symbole) ne sont pas disponibles

Analyse

Ouvrez le dossier cible de compilation (généralement bin\debug) et vérifiez que pour chaque assembly, il existe un fichier .pdb dans le même répertoire que le fichier .dll ou .exe .

Explication

Le moteur de couverture du code nécessite que chaque assembly ait son fichier .pdb associé accessible pendant l’exécution du test. S’il n’existe aucun fichier .pdb pour un assembly particulier, l’assembly n’est pas analysé.

Le fichier .pdb doit être généré à partir de la même version que les fichiers .dll ou .exe.

Solution

Assurez-vous que vos paramètres de génération génèrent le fichier .pdb .

  • Si les fichiers .pdb ne sont pas mis à jour lorsque le projet est généré, ouvrez les propriétés du projet, sélectionnez la page Générer , choisissez Avancé et inspectez les informations de débogage.

  • Dans Visual Studio 2022 et versions ultérieures, pour les projets C# ciblant .NET Core ou .NET 5+, ouvrez les propriétés du projet, sélectionnez l’onglet Générer , choisissez Général et inspectez les symboles de débogage.

  • Pour les projets C++, vérifiez que les fichiers .pdb générés contiennent des informations de débogage complètes. Ouvrez les propriétés du projet, puis vérifiez que Éditeur de liens>Débogage>Générer des infos de débogage a la valeur Générer des informations de débogage optimisées pour le partage et la publication (/DEBUG:FULL).

Si les fichiers .pdb et .dll ou .exe sont dans des endroits différents, copiez le fichier .pdb dans le même répertoire. Il est également possible de configurer le moteur de couverture du code pour rechercher des fichiers .pdb dans un autre emplacement. Pour plus d’informations, consultez Personnaliser l’analyse de la couverture du code.

Un binaire instrumenté ou optimisé est utilisé

Analyse

Déterminez si le binaire a subi une forme d’optimisation avancée telle que l’optimisation guidée par profil ou a été instrumenté par un outil de profilage tel que vsinstr.exe ou vsperfmon.exe.

Explication

Si un assembly a déjà été instrumenté ou optimisé par un autre outil de profilage, l'assembly est omis de l'analyse de couverture du code. L’analyse de la couverture du code ne peut pas être exécutée sur ces assemblys.

Solution

Désactivez l'optimisation et utilisez une nouvelle build.

Le code n’est pas managé (.NET) ni le code natif (C++)

Analyse

Déterminez si vous exécutez des tests sur du code managé ou C++.

Explication

L'analyse de la couverture du code dans Visual Studio est uniquement disponible sur du code managé ou natif (C++). Si vous utilisez des outils tiers, tout ou partie du code peut s’exécuter sur une autre plateforme.

Solution

Aucune information n’est disponible.

Le nom du projet inclut « DataCollector »

Les projets qui utilisent DataCollector dans leur nom de projet ne sont pas identifiés par la couverture du code.

L'assembly a été installé par NGen

Analyse

Déterminez si l’assembly est chargé à partir du cache d’images natif.

Explication

Pour des raisons de performances, les assemblys d’images natives ne sont pas analysés. Pour plus d’informations, consultez Ngen.exe (Native Image Generator).

Solution

Utilisez une version MSIL de l'assembly. Ne le traitez pas avec NGen.

Le fichier .runsettings personnalisé présente des problèmes de syntaxe

Analyse

Si vous utilisez un fichier .runsettings personnalisé, il peut contenir une erreur de syntaxe. La couverture du code n’est pas exécutée et la fenêtre de couverture du code ne s’ouvre pas à la fin de l’exécution du test, ou affiche les anciens résultats.

Explication

Vous pouvez exécuter vos tests unitaires avec un fichier .runsettings personnalisé pour configurer les options de couverture du code. Les options vous permettent d'inclure ou d'exclure des fichiers. Pour plus d’informations, consultez Personnaliser l’analyse de la couverture du code.

Solution

Il existe deux types d'erreurs possibles :

  • Erreur XML

    Ouvrez le fichier .runsettings dans l’Éditeur XML Visual Studio. Recherchez les indications des erreurs.

  • Erreur d’expressions régulières

    Chaque chaîne du fichier est une expression régulière. Vérifiez la présence d’erreurs dans chaque expression régulière. Recherchez en particulier :

    • Parenthèses non appariées (…) ou parenthèses sans séquence d'échappement \(...\). Si vous souhaitez faire correspondre une parenthèse dans la chaîne de recherche, vous devez l'échapper. Par exemple, pour faire correspondre à une fonction, utilisez : .*MyFunction\(double\)
    • Astérisque ou plus au début d'une expression. Pour faire correspondre à n'importe quelle chaîne de caractères, utilisez un point suivi d'un astérisque : .*

Fichier .runsettings personnalisé avec des exclusions non valides

Analyse

Si vous utilisez un fichier .runsettings personnalisé, assurez-vous qu’il inclut votre assembly.

Explication

Vous pouvez exécuter vos tests unitaires avec un fichier .runsettings personnalisé pour configurer les options de couverture du code. Les options vous permettent d'inclure ou d'exclure des fichiers. Pour plus d’informations, consultez Personnaliser l’analyse de la couverture du code.

Solution

Supprimez tous les Include nœuds du fichier .runsettings , puis supprimez tous les Exclude nœuds. Si cela résout le problème, remettez-les en étapes.

Assurez-vous que le nœud DataCollectors spécifie la couverture du code. Comparez-le à l’exemple dans Personnaliser l’analyse de la couverture du code.

Du code est toujours affiché comme non couvert

Le code d'initialisation dans les DLL natives est exécuté avant instrumentation

Analyse

Dans le code natif lié statiquement, une partie de la fonction d’initialisation DllMain et le code qu’elle appelle est parfois affiché comme non couvert, même si le code a été exécuté.

Explication

L'outil de couverture du code fonctionne en insérant l'instrumentation dans un assembly juste avant que l'application commence à s'exécuter. Dans n’importe quel assembly chargé au préalable, le code d’initialisation dans DllMain s’exécute dès le chargement de l’assembly, et avant l’exécution de l’application. Ce code apparaît comme étant non couvert, ce qui s’applique généralement aux assemblys chargés statiquement.

Solution

Aucune.

References