RC TFS 2010: Как привести сборку к сбою для низкого покрытия кода?

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

7
задан sduplooy 13 March 2010 в 08:50
поделиться

2 ответа

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

Если нет, меня впечатлил 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 
0
ответ дан 7 December 2019 в 18:42
поделиться

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

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

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

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

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

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

http://msbuildtasks.tigris.org/

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

<Error Condition=" $(CodeCoverageRatio) &lt; $(MinCodeCoverage) "
       Text="Code Coverage is below required threshold." />
2
ответ дан 7 December 2019 в 18:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: