Покрытие теста SonarQube с MsTest

Я пытался получить SonarQube работа с простым приложением dot net. У меня был некоторый успех в его запуске, но покрытие кода не работает.

похоже, что многие другие люди столкнулись с этой проблемой, когда SonarQube прекратил поддержку многих инструментов покрытия "перейти к", таких как DotCover and OpenCover via Галлио

примеры, которым я следовал:

я попробовал несколько инструментов командной строки VS для создания

vstest.console.exe .UnitTestProject1binDebugUnitTestProject1.dll /EnableCodeCoverage

и

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

и написал какой-то код, чтобы скрыть его в С здесь

To получите следующий 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>

и даже используется XSLT stylesheet обеспечивают в одном, который может быть использован SonarQube runner

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

когда я запускаю Сонар

  1. MSBuild.SonarQube.Бегун.exe начать
  2. MSBuild
  3. MSBuild.SonarQube.Бегун.ехе конец

Я получаю ошибки, вызванные:unknown XML Node, ожидал покрытие но полученный результаты

это потому, что его не нравится структура моего XML, но я не уверен, что ожидает и сколько работы мне нужно сделать над файлом покрытия, чтобы преобразовать его в формат, который нравится Sonar

надеюсь, я шел по неправильному пути, и есть простой способ интегрировать покрытие VS или coveragexml файлы в Сонар без слишком много работы

дополнительная информация о my Sonar plugins are

  1. c# = 4.1
  2. Общее Покрытие = 1.1

1 ответов


отчеты OpenCover и dotCover поддерживаются плагином C# 4.1. Установите sonar.cs.dotcover.reportsPaths или sonar.cs.opencover.reportsPaths свойство соответственно для обоих инструментов для импорта покрытия кода.

Gallio не совсем инструмент перехода: проект неактивен с 2013 года. Основная проблема с плагином SonarQube C# 2.плагин x, который полагался на Gallio, заключается в том, что он запускал Gallio сам по себе, не позволяя конечному пользователю настраивать, как должны быть запущены тесты и покрытие собранный.

теперь ситуация намного проще: Запустите свой любимый инструмент покрытия кода, попросите его создать отчет и передать его в MSBuild SonarQube Runner.

если вы используете Team Foundation Server 2013, включение покрытия кода - это выбор Enable Code Coverage опция в определении сборки.

теперь, это очень прискорбно и запутанно, что Microsoft имеет два различных .coveragexml форматы, и что плагин SonarQube C# поддерживает только один из них (то есть пока. см.http://jira.sonarsource.com/browse/SONARNTEST-3).

ожидая, что билет будет исправлен, вот шаги, чтобы произвести ожидаемое .coveragexml отчет (Примечание: замените 14 by 12 в различных путях, если вы используете VS 2013 вместо 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

Я бы не рекомендуется использовать XSLTs для преобразования форматов отчетов покрытия кода, используйте CodeCoverage.exe Microsoft tool вместо этого.