当代码覆盖率低于某个阈值时,如何导致构建失败?
答案 0 :(得分:2)
主要问题是MSTest生成的代码覆盖率结果文件是二进制格式。但是,假设在VS2010中事情没有太大变化,您应该能够使用此实用程序将其转换为XML文件:
http://codeexperiment.com/file.axd?file=2008%2f9%2fCodeCoverageConverter.zip
注意:您可能需要针对VS2010版本的“Microsoft.VisualStudio.Coverage.Analysis.dll”重新编译它。
然后,您可以使用首选的解析XML文件的方法,对每个已检测的程序集进行数学计算以计算总体覆盖率。您感兴趣的XPath(至少对于VS2008)是:
/CoverageDSPriv/Module/LinesCovered
/CoverageDSPriv/Module/LinesNotCovered
如果您想在纯MSBuild中执行最后一步,那么MSBuild社区任务库中包含的'XmlRead'和'Math'任务应该足够了:
http://msbuildtasks.tigris.org/
在MSBuild属性中获得总体比率之后,如果该数字低于所需阈值,则只需使用条件任务来破坏构建。
<Error Condition=" $(CodeCoverageRatio) < $(MinCodeCoverage) "
Text="Code Coverage is below required threshold." />
答案 1 :(得分:0)
使用构建任务很可能有一种方法(特别是如果你愿意自己动手)。希望有人会为您发布一些示例代码。
如果没有,我对这类任务的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
答案 2 :(得分:0)
古代问题,但未标记为已回答。看看this