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.
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 :
- Exécutez Analyser la couverture du code.
- 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 :
.*
- 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 :
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.