2015-08-04 23 views
7

Ho cercato di ottenere SonarQube lavorando con una semplice applicazione dot net. Ho avuto un discreto successo, ma la copertura del codice non funziona.SonarQube Test Coverage con MsTest

Sembra che molte altre persone hanno affrontato questo problema quando SonarQube interrotto il supporto per molti dei strumento di copertura di 'andare a' quali DotCover and OpenCover via Gallio

esempi che ho seguito sono:

ho provato alcuni degli strumenti a linea di comando VS per generare un file

vstest.console.exe .\UnitTestProject1\bin\Debug\UnitTestProject1.dll /EnableCodeCoverage 

e

CodeCoverage.exe collect /output:DynamicCodeCoverage.coverage .\UnitTestProject1\bin\Debug\UnitTestProject1.dll 

.coverage e scritto un po 'di codice come per convertirlo in un .coveragexml file da here

Per ottenere quanto segue XML:

<?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> 

E anche foglio di stile XSLT utilizzato Indicare in quella che potrebbe essere utilizzato da parte del corridore 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> 

quando corro Sonar

  1. MSBuild.SonarQube.Runner. exe Inizio
  2. MSBuild
  3. MSBuild. SonarQube.Runner.exe fine

ricevo errori come causati da: unknown XML Node, si aspettano copertura ma ottenuto Risultati

Questo perché la sua non piace la struttura del mio XML, ma non sono sicuro di cosa si stia aspettando e quanto lavoro devo fare sul file di copertura per convertirlo in un formato che piace a Sonar

Speriamo di aver percorso il percorso sbagliato e lì s un modo semplice per integrare VS copertura o coveragexml file in Sonar senza troppo lavoro

informazioni extra sul mio Sonar plugins sono

  1. C# = 4.1
  2. Generico Copertura = 1.1

risposta

4

Sia OpenCover e dotCover rapporti sono supportati dal plug-in C# 4.1. Impostare rispettivamente la proprietà sonar.cs.dotcover.reportsPaths o sonar.cs.opencover.reportsPaths per entrambi gli strumenti per importare la copertura del codice.

Gallio non è esattamente lo strumento ideale: il progetto è inattivo dal 2013. Il problema principale con il plug-in SonarQube C# Plugin 2.x che si basava su Gallio è che stava lanciando Gallio da solo - non permettendo la fine -utente per personalizzare il modo in cui i test devono essere avviati e la copertura raccolta.

Ora la situazione è molto più semplice: lancia il tuo strumento di copertura del codice preferito, chiedi di produrre un rapporto e fornilo al MSBuild SonarQube Runner.

Se si utilizza Team Foundation Server 2013, l'abilitazione della copertura del codice è uguale alla scelta dell'opzione Enable Code Coverage nella definizione di build.

Ora, è molto infelice e confusa che Microsoft ha due diversi .coveragexml formati, e che il SonarQube C# Plugin supporta solo uno di loro (vale a dire, per ora. Vedi http://jira.sonarsource.com/browse/SONARNTEST-3).

In attesa di quel biglietto da fissare, qui sono i passi per produrre la .coveragexml rapporto atteso (nota: Sostituire 14 dai 12 nei vari percorsi, se si sta utilizzando VS 2013 anziché del 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

non mi consiglia di utilizzare XSLT per convertire formati di report copertura del codice, utilizzare lo strumento Microsoft CodeCoverage.exe invece.

+0

Grazie per la rapida risposta! Ha funzionato perfettamente. Ho ottenuto la copertura del codice importata utilizzando CodeCoverage.exe. Non usiamo TFS (TeamCity è il nostro standard), quindi non ho esplorato tale opzione. Non ho provato la soluzione suggerita OpenCover o DotCover ma lo farò e riferirò. – user3210699

+0

@ user3210699 Ciao, hai mai avuto l'opzione OpenCover che funziona con MSTest? – Saan

+0

Ciao, ho provato OpenCover solo con VSTest, ma mi aspetto che MSTest funzioni in modo simile. Puoi consultare http://docs.sonarqube.org/display/PLUG/C%23+Code+Coverage+Results+Import per le istruzioni complete. –