我一直在尝试将SonarQube
与一个简单的.NET应用程序配合使用。我已经成功地启动了它,但代码覆盖率不起作用。
看起来像许多其他人一样,在SonarQube停止支持许多“go to”覆盖工具(如DotCover和OpenCover
)之后,许多人都面临了这个问题,通过Gallio
我所遵循的示例包括:
我已经尝试了几个VS命令行工具来生成.coverage
文件
vstest.console.exe .\UnitTestProject1\bin\Debug\UnitTestProject1.dll /EnableCodeCoverage
和
CodeCoverage.exe collect /output:DynamicCodeCoverage.coverage .\UnitTestProject1\bin\Debug\UnitTestProject1.dll
我已经编写了一些代码,可以将其转换为.coveragexml
文件,代码可从此处获取。
以获得以下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>
甚至可以使用SonarQube运行程序所提供的XSLT样式表。
<?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>
当我运行Sonar时,我会得到像“Caused By: 未知XML节点,期望覆盖率(Coverage)而得到结果(Results)”这样的错误。这是因为它不喜欢我的XML结构,但我不确定它期望什么以及我需要多少工作来将覆盖文件转换为Sonar喜欢的格式。希望能有一种简单的方法将VS Coverage或coveragexml文件集成到Sonar中,而不需要太多的工作。关于我的Sonar插件的额外信息是: c#= 4.1 通用覆盖率= 1.1