.NET6项目SonarQube无代码覆盖率及单元测试数问题求助
解决NUnit测试数在SonarQube中显示为0的问题
1. 先确保生成NUnit测试结果XML文件
你当前的dotnet dotcover test命令只生成了dotCover的HTML覆盖率报告,没有输出NUnit的测试结果XML文件。需要修改测试命令,让NUnit同时生成XML格式的测试结果:
dotnet dotcover test --dcReportType=HTML --logger:"nunit;LogFilePath=Nunit/Result.xml"
--logger:"nunit;LogFilePath=Nunit/Result.xml"会让NUnit在指定路径生成测试结果XML,若Nunit目录不存在,命令会自动创建。
2. 修正SonarScanner的报告路径配置
在dotnet sonarscanner begin阶段,确保NUnit报告路径配置正确:
- 相对路径以执行
begin命令的项目根目录为基准 - 路径用正斜杠
/或转义反斜杠\\,避免单个反斜杠的转义问题
修改后的begin命令示例:
dotnet sonarscanner begin /k:"<sonar-project-key>" /d:sonar.login="<sonar-token>" /d:sonar.cs.dotcover.reportsPaths=dotCover.Output.html /d:sonar.cs.nunit.reportsPaths="Nunit/Result.xml"
3. 验证报告文件的有效性
执行测试命令后,手动检查Nunit/Result.xml是否存在:
- 若文件不存在,检查测试命令是否报错,或路径拼写错误
- 若文件存在,打开确认内容是有效的NUnit测试结果(非空、格式正确)
4. 确保测试项目被扫描到
- 确认
dotnet build命令覆盖了测试项目(如果是解决方案,dotnet build会编译所有项目;单个项目需明确指定测试项目) - 检查SonarQube项目的分析范围配置,未将测试项目排除在外
5. 严格遵循命令执行顺序
必须按以下顺序执行,保证Sonar能正确读取报告:
dotnet sonarscanner begin(初始化扫描上下文)dotnet build --no-incrementaldotnet dotcover test(生成覆盖率和测试结果报告)dotnet sonarscanner end(读取所有报告并上传)
内容的提问来源于stack exchange,提问作者khaoula ismail
相关产品推荐
相关产品推荐

