À l'aide de .runsettings à exclure des assemblages à partir de la couverture de code
Lors de l'exécution de la couverture de code pour ma solution qui contient de multiples projets, j'ai remarqué que la Couverture de Code comprend également mes montages d'essai.
J'ai trouvé un article qui suggère le modèle suivant pour .runsettings:
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<DataCollectionRunSettings>
<DataCollectors>
<DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=11.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<Configuration>
<CodeCoverage>
<ModulePaths>
<Include>
<!-- Do not specify any includes. This will attempt to include all binaries -->
</Include>
<Exclude>
<!-- Exclude modules that aren't to be processed, by their name /path -->
<ModulePath>.*Tests\.dll$</ModulePath> <!-- I put it here -->
</Exclude>
</ModulePaths>
<UseVerifiableInstrumentation>True</UseVerifiableInstrumentation>
<AllowLowIntegrityProcesses>True</AllowLowIntegrityProcesses>
<CollectFromChildProcesses>True</CollectFromChildProcesses>
<CollectAspDotNet>False</CollectAspDotNet>
<!--
Additional paths to search for symbol files. Symbols must be found for modules to be instrumented.
If symbols are alongside the binaries, they are automatically picked up. Otherwise specify the here.
Note that searching for symbols increases code coverage runtime. So keep this small and local.
<SymbolSearchPaths>
<Path>C:\Users\User\Documents\Visual Studio 11\Projects\ProjectX\bin\Debug</Path>
<Path>\\mybuildshare\builds\ProjectX</Path>
</SymbolSearchPaths>
-->
<Functions>
<Exclude>
<Function>^std::.*</Function>
<Function>^ATL::.*</Function>
<Function>.*::__GetTestMethodInfo.*</Function>
<Function>^Microsoft::VisualStudio::CppCodeCoverageFramework::.*</Function>
<Function>^Microsoft::VisualStudio::CppUnitTestFramework::.*</Function>
<Function>.*::YOU_CAN_ONLY_DESIGNATE_ONE_.*</Function>
</Exclude>
</Functions>
<Attributes>
<Exclude>
<Attribute>^System.Diagnostics.DebuggerHiddenAttribute$</Attribute>
<Attribute>^System.Diagnostics.DebuggerNonUserCodeAttribute$</Attribute>
<Attribute>^System.Runtime.CompilerServices.CompilerGeneratedAttribute$</Attribute>
<Attribute>^System.CodeDom.Compiler.GeneratedCodeAttribute$</Attribute>
<Attribute>^System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverageAttribute$</Attribute>
</Exclude>
</Attributes>
<Sources>
<Exclude>
<Source>.*\\atlmfc\\.*</Source>
<Source>.*\\vctools\\.*</Source>
<Source>.*\\public\\sdk\\.*</Source>
<Source>.*\\microsoft sdks\\.*</Source>
<Source>.*\\vc\\include\\.*</Source>
</Exclude>
</Sources>
<CompanyNames>
<Exclude>
<CompanyName>.*microsoft.*</CompanyName>
</Exclude>
</CompanyNames>
<PublicKeyTokens>
<Exclude>
<PublicKeyToken>^B77A5C561934E089$</PublicKeyToken>
<PublicKeyToken>^B03F5F7F11D50A3A$</PublicKeyToken>
<PublicKeyToken>^31BF3856AD364E35$</PublicKeyToken>
<PublicKeyToken>^89845DCD8080CC91$</PublicKeyToken>
<PublicKeyToken>^71E9BCE111E9429C$</PublicKeyToken>
<PublicKeyToken>^8F50407C4E9E73B6$</PublicKeyToken>
<PublicKeyToken>^E361AF139669C375$</PublicKeyToken>
</Exclude>
</PublicKeyTokens>
</CodeCoverage>
</Configuration>
</DataCollector>
</DataCollectors>
</DataCollectionRunSettings>
</RunSettings>
Maintenant, le problème est que dès que j'ai vérifier mon .runsettings fichier dans le TEST\Test des paramètres de menu, je vois la Couverture de Code analyse seulement l'une des nombreuses assemblées dans ma solution.
Même si je supprime la ligne
<ModulePath>.*Tests\.dll$</ModulePath> <!-- I put it here -->
une seule assemblée, est analysée. Je voudrais éviter d'ajouter tous mes assemblées à la liste d'inclusion, j'ai juste besoin d'exclure tous les montages d'essai.
Pourquoi .runsettings faire la couverture de code ne voyez qu'une seule des assemblées dans mon VS solution?
- msdn.microsoft.com/de-de/library/vstudio/jj635153.aspx dit que vous pouvez supprimer toutes les entrées de ce fichier (en tant que valeurs par défaut sont utilisées). Essayez de commencer avec un fichier vide et ajouter une région après l'autre.
- Je suis confronté à un problème similaire, avec un beaucoup plus simple fichier. Avec la valeur par défaut runsettings fichier, je suis en mesure d'obtenir la couverture de code. Quand j'ai essayé d'exclure un tiers de la bibliothèque (par exemple), puis de l'exécution de l'analyse de Couverture de Code les résultats de ... rien. Pas d'erreurs, pas de mises en garde, rien du tout. Commentaire de l'exclusion, et tout fonctionne à nouveau.
- simplement en ajoutant de l'anglais (états-unis) version de MSDN lien fourni par @habakuk msdn.microsoft.com/en-us/library/vstudio/jj635153.aspx
Vous devez vous connecter pour publier un commentaire.
La question est la période. Pour une raison quelconque, la RegEx est d'étouffement sur que. Vous pouvez contourner ce problème en s'échappant de la période, comme suit:
Aussi, le vide comprend sont valides et impliquent que tous les Modules sont inclus. Les commentaires de Microsoft fourni l'échantillon de l'état qui:
Sur une note connexe, je suis tombé sur ce post parce que j'ai été peu à penser clairement à propos de l'expression régulière de la nature de l'inclure et exclure des chemins. Pour mon application WPF, j'ai voulu exclure de l'analyse de couverture sur Caliburn.Micro. Si j'avais écrit
Clairement, le délai est de me gâcher. Cette question ne souffre pas de ce problème, mais je parie que je ne suis pas le seul à l'ignorer, ce simple fait. Pour tous les autres lecteurs, veuillez aussi prendre note que * n'est pas un générique – c'est l'expression régulière “un certain nombre de” de l'opérateur. Vous ne voulez pas
*.Caliburn
, mais plutôt.*Caliburn
Ainsi, cette simple déclaration résolu mon problème:Parce qu'il est à la recherche d'un chemin, pas seulement un nom de module, vous avez besoin de l' .* en face avant du module de l'ignorer – qui est, vous voulez ignorer à tout chemin d'accès au fichier.
Que je n'arrivais pas à trouver cette réponse n'importe où ailleurs, et cela m'a pris un certain temps à comprendre,
ModulePath
est le chemin d'accès complet, et vous avez peut-être correspondant à votre modèle de quelque part d'autre dans le chemin d'accès.Par exemple, si vous avez un projet
Foo
et un projetFoo.Tests
, et ils sont construits sur leurs propres répertoires, vous allez vous retrouver avecFoo.Tests\bin\Release\Foo.dll
etFoo.Tests\bin\Release\Foo.Tests.dll
. C'est la dll que le test assemblée de référence, de sorte que c'est le chemin qui est utilisé.Foo\bin\Release\Foo.dll
n'est pas directement référencé par le test de l'assemblée.Si vous essayez d'exclure
.*tests.*
il sera en adéquation avec les deux chemins d'accès et ne produisent pas de couverture.À seulement exclure les assemblages avec "test" dans leur nom de fichier, en ignorant leur chemin, j'ai utilisé
Malheureusement, je ne pouvais pas prendre d'autres réponses de travail pour moi, mais j'ai eu ce travail, comme par https://msdn.microsoft.com/en-us/library/jj159530.aspx:
J'ai eu toutes sortes de problèmes à obtenir
<ModulePaths>
pour fonctionner de manière fiable (à l'aide de ASP.NET de Base 2.1).À la fin, j'ai trouvé que l'utilisation de la
<Sources>
était simple et la plus fiable et fonctionne exactement comme je le voulais. Vous avez encore l'effet de levier des conseils sur l'utilisation de regex.- Je inclure mon solution de chemin, et de l'exclure de ma \tests des sous-dossiers où tous mes projets de test en direct. Exemple pour CodeCoverage élément RunSettings fichier xml:
En savoir plus: La personnalisation de la Couverture de Code sur MS Docs