web-dev-qa-db-fra.com

Comment exclure des projets dont le nom se termine par ".Test" de l'analyse de couverture de code dans les tests unitaires VS2012

Ma solution est configurée avec des projets appelés "NomProjet" avec "NomProjet" .Tests contenant mes tests unitaires. J'aimerais exclure les projets de test de l'analyse de la couverture de code sous VS 2012 (MS Test) et y suis parvenu en ajoutant l'attribut ExcludeFromCodeCoverage à chaque classe de test, comme décrit ici

Comme le nombre de classes de tests augmente, il serait judicieux d’exclure les ensembles de tests entiers. Je souhaite utiliser le fichier .runsettings également décrit dans ce lien MSDN mais ne semble pas avoir de chance.

Voici mon fichier .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>
              <Exclude>
                <ModulePath>.*tests.*</ModulePath>
                <ModulePath>.*Tests.*</ModulePath>>
              </Exclude>
            </ModulePaths>
          </CodeCoverage>
        </Configuration>
      </DataCollector>
    </DataCollectors>
  </DataCollectionRunSettings>
</RunSettings>

Il en résulte des résultats vides générés pour la couverture de code. Si je commente l'ensemble du bloc <Exclude>, je reçois une couverture de code pour tous les projets de la solution, y compris les tests (comme prévu, je voulais simplement m'assurer que l'ajout du fichier runSettings n'était pas causer des problèmes lui-même).

J'ai essayé d'ajouter dans:

<Include>
  <ModulePath>.*\.dll$</ModulePath>
  <ModulePath>.*\.exe$</ModulePath>
</Include>

Mais encore une fois, je reçois des résultats vides. J'avais l'impression qu'un bloc Include vide (ou inexistant) inclura tout par défaut sauf si correspond au bloc Exclude, je ne pense donc pas que cela soit strictement requis.

Est-ce que quelqu'un peut-il me montrer la bonne direction? Je vois de cette autre question que je ne suis pas le seul à vouloir exclure les tests, mais je voudrais le faire au niveau de l’Assemblée et MSDN semble suggérer que je peux le faire.

25
Dutts

Il existe un lien avec la question de période telle qu’elle a été mentionnée ici . Si vous modifiez la section exclure par ceci

<ModulePath>.*tests.dll</ModulePath>
<ModulePath>.*Tests.dll</ModulePath>

ou ca

<ModulePath>.*\.tests\..*</ModulePath>
<ModulePath>.*\.Tests\..*</ModulePath>

ça va marcher

40
Grin

Vous pouvez l'exclure en excluant la dll du projet ou en utilisant également le nom du projet. Par exemple. - 

<ModulePaths>
 <Exclude>
  <ModulePath>Fabrikam.Math.UnitTest.dll</ModulePath>  
    <!-- You can add more ModulePath nodes here. -->
 </Exclude> 
</ModulePaths>

Ce lien MSDN est utile pour cela.

0
ShaileshDev