TFS 2010 RC: как провалить сборку из-за низкого покрытия кода? - PullRequest
7 голосов
/ 10 марта 2010

Как вызвать сбой сборки, если покрытие кода ниже определенного порога?

Ответы [ 3 ]

2 голосов
/ 19 марта 2010

Основная проблема заключается в том, что файл результатов покрытия кода, который создает MSTest, находится в двоичном формате. Однако, предполагая, что в VS2010 ситуация не сильно изменилась, вы сможете использовать эту утилиту для преобразования ее в файл XML:

http://codeexperiment.com/file.axd?file=2008%2f9%2fCodeCoverageConverter.zip

ПРИМЕЧАНИЕ. Возможно, вам потребуется перекомпилировать его для версии Microsoft.VisualStudio.Coverage.Analysis.dll для VS2010.

Затем вы можете использовать предпочитаемый метод анализа этого XML-файла, выполняя математические расчеты для каждой из инструментальных сборок, чтобы рассчитать общий коэффициент покрытия. XPaths, которые вас интересуют (по крайней мере для VS2008):

/CoverageDSPriv/Module/LinesCovered
/CoverageDSPriv/Module/LinesNotCovered

Если вы хотите выполнить этот последний шаг в чистом MSBuild, то задач 'XmlRead' и 'Math', содержащихся в библиотеке задач сообщества MSBuild, должно быть достаточно:

http://msbuildtasks.tigris.org/

Получив общее соотношение в свойстве MSBuild, вы просто используете условную задачу, чтобы прервать сборку, если это число меньше желаемого порога.

<Error Condition=" $(CodeCoverageRatio) &lt; $(MinCodeCoverage) "
       Text="Code Coverage is below required threshold." />
0 голосов
/ 30 марта 2012

Древний вопрос, но не помеченный как ответ. Взгляните на это

0 голосов
/ 18 марта 2010

Скорее всего, есть способ сделать это с помощью задачи сборки (особенно, если вы хотите выполнить свою собственную). Надеюсь, кто-то опубликует для вас пример кода.

Если нет, я был впечатлен NDepend для этого типа задачи. Вы можете написать в очень понятном, похожем на SQL синтаксисе, чтобы определять все виды метрик в вашем коде и предупреждать или не выполнять сборку на основе порогов.

Примеры:

WARN IF Count > 0 IN SELECT METHODS WHERE CodeWasChanged AND PercentageCoverage <  95
WARN IF Count > 0 IN SELECT METHODS WHERE IsPublic AND IsInOlderBuild AND WasRemoved 
...