SonarQube de la Couverture de Test avec MsTest

j'ai essayé d'obtenir de l' SonarQube travailler avec une simple application Point net. J'ai réussi à le faire fonctionner, mais la couverture du code ne fonctionne pas.

il semble que beaucoup d'autres personnes ont fait face à ce problème lorsque SonarQube a cessé de soutenir bon nombre de l'outil de couverture "go to" tel que DotCover and OpenCover par Gallion

exemples que j'ai suivis:

j'ai essayé quelques outils en ligne de commande de VS pour générer un .coverage le fichier

vstest.console.exe .UnitTestProject1binDebugUnitTestProject1.dll /EnableCodeCoverage

et

CodeCoverage.exe collect /output:DynamicCodeCoverage.coverage .UnitTestProject1binDebugUnitTestProject1.dll

et écrit un code comme pour le cacher dans un .coveragexml le fichier ici

à obtenir le XML suivant:

<?xml version="1.0" standalone="yes"?>
<CoverageDSPriv>
  <Module>
    <ModuleName>unittestproject1.dll</ModuleName>
    <ImageSize>32768</ImageSize>
    <ImageLinkTime>0</ImageLinkTime>
    <LinesCovered>12</LinesCovered>
    <LinesPartiallyCovered>0</LinesPartiallyCovered>
    <LinesNotCovered>0</LinesNotCovered>
    <BlocksCovered>9</BlocksCovered>
    <BlocksNotCovered>0</BlocksNotCovered>
    <NamespaceTable>
      <BlocksCovered>9</BlocksCovered>
      <BlocksNotCovered>0</BlocksNotCovered>
      <LinesCovered>12</LinesCovered>
      <LinesNotCovered>0</LinesNotCovered>

et même utilisé XSLT stylesheet fournir dans un qui pourrait être utilisé par le coureur SonarQube

<?xml version="1.0" encoding="utf-8"?>
<results>
  <modules>
    <module name="unittestproject1.dll" path="unittestproject1.dll" block_coverage="100" line_coverage="100" blocks_covered="9" blocks_not_covered="0" lines_covered="12" lines_partially_covered="0" lines_not_covered="0">
      <functions>
        <function name="Setup" type_name="UnitTest1" block_coverage="100" line_coverage="100" blocks_covered="1" blocks_not_covered="0" lines_covered="2" lines_partially_covered="0" lines_not_covered="0">
          <ranges>
            <range source_id="1" covered="yes" start_line="13" start_column="9" end_line="13" end_column="10" />
            <range source_id="1" covered="yes" start_line="15" start_column="9" end_line="15" end_column="10" />
          </ranges>
        </function>

quand je lance Sonar

  1. MSBuild.SonarQube.Coureur.exe Begin
  2. MSBuild
  3. MSBuild.SonarQube.Coureur.exe fin

j'ai des erreurs comme Causée Par: unknown XML Node, Attendre Couverture mais obtenir Résultats

c'est parce qu'il n'aime pas la structure de mon XML, mais je ne suis pas sûr de ce qui est prévu et combien de travail je dois faire sur le fichier de couverture pour le convertir dans un format que le Sonar aime

J'espère que j'ai suivi la mauvaise voie et qu'il y a une façon simple d'intégrer la couverture VS ou coveragexml fichiers dans Sonar sans trop de travail

Informations Supplémentaires sur mon Sonar plugins

  1. c# = 4.1
  2. Couverture Générique = 1.1
7
demandé sur Community 2015-08-04 10:52:10

1 réponses

les rapports OpenCover et dotCover sont supportés par le plugin c# 4.1. Définissez sonar.cs.dotcover.reportsPaths ou sonar.cs.opencover.reportsPaths propriété respectivement pour les deux outils pour importer la couverture de code.

Gallion n'est pas exactement l'outil: le projet est inactif depuis 2013. Le problème principal avec le Plugin SonarQube C# 2.x plugin qui reposait sur Gallio est qu'il lançait Gallio par lui - même-ne permettant pas à l'utilisateur final de personnaliser la façon dont les tests devraient être lancés et la couverture recueillir.

maintenant la situation est beaucoup plus facile: lancez votre outil de couverture de code préféré, demandez-lui de produire un rapport, et le transmettre au coureur SonarQube MSBuild.

si vous utilisez Team Foundation Server 2013, activer la couverture de code est comme choisir le Enable Code Coverage option dans la définition de build.

Or, il est très regrettable et déroutant que Microsoft ait deux .coveragexml formats, et que le Plugin SonarQube C# ne supporte qu'un seul D'entre eux (qui est, pour l'instant. voir http://jira.sonarsource.com/browse/SONARNTEST-3).

en attendant que ce billet soit réparé, voici les étapes à suivre pour produire le .coveragexml rapport (note: remplacer 14 par 12 dans les différents chemins si vous utilisez VS 2013 au lieu de 2015):

  1. MSBuild.SonarQube.Runner begin /k:SonarQube_Project_Key /n:SonarQube_Project_Name /v:1.0 /d:sonar.cs.vscoveragexml.reportsPaths=%CD%\VisualStudio.coveragexml
  2. msbuild
  3. "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Dynamic Code Coverage Tools\CodeCoverage.exe" collect /output:VisualStudio.coverage "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.console.exe" "UnitTestProject1\bin\Debug\UnitTestProject1.dll"
  4. "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Dynamic Code Coverage Tools\CodeCoverage.exe" analyze /output:VisualStudio.coveragexml VisualStudio.coverage
  5. MSBuild.SonarQube.Runner end

je ne voudrais pas recommander D'utiliser XSLTs pour convertir les formats de rapport de couverture de code, utilisez le CodeCoverage.exe Microsoft tool à la place.

4
répondu Dinesh Bolkensteyn 2015-08-04 13:33:07