我正在使用sonar-runner在我的C#代码上运行测试和代码覆盖,借助于gallio插件。测试运行正常,但我无法在声纳Web UI上看到任何代码覆盖率。
我的声纳设置如下:
sonar-project.properties
仅提及相关位
sonar.gallio.coverage.tool = NCover
sonar.NCover.installDirectory = C:/ Program Files / NCover
sonar.donet.visualstudio.testProjectPattern = .Test
sonar.dotnet.buildConfigurations =“发布| x86”
知道什么是错过的?
sonar.projectKey=XXX:XXX
sonar.projectVersion=trunk
sonar.projectName=XXX
sources=.
sonar.language=cs
sonar.dotnet.visualstudio.solution.file=Project.sln
sonar.dotnet.excludeGeneratedCode=false
sonar.dotnet.4.0.sdk.directory=C:/WIndows/Microsoft.NET/Framework/v4.0.30319
sonar.dotnet.version=4.0
# Gallio
sonar.gallio.mode=
sonar.gallio.coverage.tool=NCover
sonar.gallio.runner=IsolatedAppDomain
sonar.NCover.installDirectory=c:/Program Files/NCover
sonar.gallio.installDirectory=C:/Program Files/Gallio
sonar.dotnet.test.assemblies=$(SolutionDir)/../**/bin/**/*.Tests.Unit.dll
# FXCop
sonar.fxcop.mode=
#StyleCop
sonar.stylecop.mode=
#NDeps
sonar.ndeps.mode=skip
sonar-runner.properties
答案 0 :(得分:1)
你说
sonar.dotnet.buildConfigurations =“发布| x86”
如果这是真的,那么您的构建可能不会生成.pdb文件,这些文件是确定二进制文件和源文件之间的映射所必需的。
如果您使用Debug构建尝试它吗?
答案 1 :(得分:0)
我在声纳中看到了与NCover相同的行为。我发现Sonar为Gallio的NCover跑者制造了无效的论据。
尝试将Sonar的跑步者的输出管道传输到文本文件中,以便您可以更轻松地检查参数(在命令行中,您只需键入sonar-runner> output.txt即可)。
您可能会在输出中看到这样的一行:
INFO .u.c.CommandExecutor - Executing command: C:\Program Files\Gallio\bin\Gallio.Echo.exe /r:Local /report-directory:E:\Reports\.sonar /report-name-format:gallio-report /report-type:Xml E:\Projects\UnitTests\bin\Release\UnitTests.dll /runner-property:NCoverCoverageFile=E:\Reports\.sonar\coverage-report.xml /runner-property:NCoverArguments=//ias MyFirstAssembly;MySecondtAssembly;MyThirdAssembly
如果您尝试在命令行上通过Gallio手动执行此操作,则会出现错误:
Cannot find file 'MyFirstAssembly;MySecondtAssembly;MyThirdAssembly'
如果您手动将此列表编辑为单个条目(例如MyFirstAssembly *),则一切都将按预期工作。
这似乎表明Sonar正在为Gallio生成无效的命令行参数。尽管我喜欢NCover,但最简单的解决方案是使用OpenCover。