3
votes

Comment faire en sorte que VS ignore la couverture de code pour la dll de test

Actuellement, lorsque j'exécute une analyse de couverture de code, la couverture rapportée est de 90%. Le fait est que les 10% restants sont le code du test réel!

Comment puis-je faire en sorte que VS ignore ce code de test et ne prenne en compte que le code réel?


0 commentaires

3 Réponses :


3
votes

Vous pouvez ajouter un fichier de paramètres d'exécution dans votre projet.

Dans ce fichier, vous pouvez mentionner les noms de DLL qui doivent être exclus de la couverture du code:

<ModulePaths>
  <Include>
    <!-- Include all loaded .dll assemblies (but not .exe assemblies): -->
    <ModulePath>.*\.dll$</ModulePath>
  </Include>
  <Exclude>
    <!-- But exclude some assemblies: -->
    <ModulePath>.*\\Fabrikam\.MyTests1\.dll$</ModulePath>
    <!-- Exclude all file paths that contain "Temp": -->
    <ModulePath>.*Temp.*</ModulePath>
  </Exclude>
</ModulePaths>

Cette page et Cette page devrait vous en donner plus des détails sur la façon d'ajouter et de configurer le fichier runsettings pour les tests unitaires.

J'espère que cela vous aidera.


2 commentaires

Si vous vous demandez où se trouve le fichier, allez dans Menu Test -> Paramètres de test et vous y verrez un fichier .runsettings. Sinon, un nouveau peut être créé selon l'exemple sur Microsoft docs ici: docs.microsoft.com/en-us/visualstudio/test/...


@Manoj_Choudhari Cela ne fonctionne pas dans mon cas stackoverflow.com/questions/62710466/...



0
votes

1.Vous devez ajouter un fichier Xml dans votre projet de test dont l'extension doit être .runsettings. une fois que vous avez ajouté ce fichier runsettings, copiez l'extrait de code ci-dessous et collez-le dans le fichier runsettings.

2.À l'intérieur de la balise ModulePaths , il y a la balise Exclude . peut mentionner les noms de DLL ou le nom de projet qui doivent être exclus de la couverture du code.

3.Pour le projet de test, nous devrions mentionner le nom du projet plutôt que sa DLL. Par exemple: le nom de mon projet de test est Skyve.Helper.Document.Test . J'ai donc mentionné le nom du projet dans la balise Exclude .

<?xml version="1.0" encoding="utf-8"?>
<!-- File name extension must be .runsettings -->
<RunSettings>
<DataCollectionRunSettings>
<DataCollectors>
  <DataCollector friendlyName="Code Coverage" uri="datacollector://Microsoft/CodeCoverage/2.0" assemblyQualifiedName="Microsoft.VisualStudio.Coverage.DynamicCoverageDataCollector, Microsoft.VisualStudio.TraceCollector, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <Configuration>
      <CodeCoverage>
        <ModulePaths>
          <Include>
          </Include>
           <Exclude>
             <ModulePath>.*CPPUnitTestFramework.*</ModulePath>
             <ModulePath>.*TestAdapter.*</ModulePath>
             <ModulePath>.*\moq.dll$</ModulePath>
             <ModulePath>.*Skyve.Helper.Document.Test.*</ModulePath>

          </Exclude>
        </ModulePaths>
        <!-- Match fully qualified names of functions: -->
        <!-- (Use "\." to delimit namespaces in C# or Visual Basic, "::" in C++.)  -->
        <Functions>
          <Exclude>
            <Function>^Fabrikam\.UnitTest\..*</Function>
            <Function>^std::.*</Function>
            <Function>^ATL::.*</Function>
            <Function>.*::__GetTestMethodInfo.*</Function>
            <Function>^Microsoft::VisualStudio::CppCodeCoverageFramework::.*</Function>
            <Function>^Microsoft::VisualStudio::CppUnitTestFramework::.*</Function>
            <Function>.*get_.*</Function>
            <Function>.*set_.*</Function>
            <Function>.*MoveNext.*</Function>
            <!--<Function>.*ValidateAVSRequestforHierarchy.*</Function>
            <Function>.*FetchDistinctAddress.*</Function>-->

         </Exclude>
        </Functions>
        <!-- Match attributes on any code element: -->
        <Attributes>
          <Exclude>
            <!-- Don’t forget "Attribute" at the end of the name -->
            <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>
            <Attribute>^NUnit.Framework.TestFixtureAttribute$</Attribute>
            <Attribute>^Xunit.FactAttribute$</Attribute>
            <Attribute>^Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute$</Attribute>
            <!--<Attribute>^skyve.helper.Avs.Core.Proxy$</Attribute>-->
          </Exclude>
        </Attributes>
        <!-- Match the path of the source files in which each method is defined: -->
        <Sources>
          <Exclude>
            <Source>.*\\atlmfc\\.*</Source>
            <Source>.*\\vctools\\.*</Source>
            <Source>.*\\public\\sdk\\.*</Source>
            <Source>.*\\microsoft sdks\\.*</Source>
            <Source>.*\\vc\\include\\.*</Source>
            <Source>.*\\Program.cs </Source>
            <Source>.*\\Startup.cs </Source>
            <Source>.*\\Filter\\.*</Source>
            <Source>.*\\RouteConfig.cs </Source>
          </Exclude>
        </Sources>
        <!-- Match the company name property in the assembly: -->
        <CompanyNames>
          <Exclude>
            <CompanyName>.*microsoft.*</CompanyName>
          </Exclude>
        </CompanyNames>
        <!-- Match the public key token of a signed assembly: -->
        <PublicKeyTokens>
          <!-- Exclude Visual Studio extensions: -->
          <Exclude>

          </Exclude>
        </PublicKeyTokens>
        <!-- We recommend you do not change the following values: -->
        <UseVerifiableInstrumentation>True</UseVerifiableInstrumentation>
        <AllowLowIntegrityProcesses>True</AllowLowIntegrityProcesses>
        <CollectFromChildProcesses>True</CollectFromChildProcesses>
        <CollectAspDotNet>False</CollectAspDotNet>
      </CodeCoverage>
    </Configuration>
  </DataCollector>
</DataCollectors>


2 commentaires

Cela ne fonctionne pas dans mon cas stackoverflow.com/questions/62710466/...


L'entrée . * \ Moq.dll $ doit être soit . * Moq.dll $ ou . * \\ moq.dll $ car elle n'a pas de sens d'échapper au caractère m dans une expression rationnelle.



-1
votes

Il existe maintenant l'attribut ExcludeFromCodeCoverage avec lequel le code exclu peut être décoré. Je l'utilise avec beaucoup de succès.

Placer cet attribut sur une classe ou une structure exclut tous les membres de cette classe ou structure de la collection d'informations de couverture de code.


0 commentaires