You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SonarQube报告.NET 8代码覆盖率部分缺失,咨询缺失项及排查方法

问题:SonarQube检测.NET 8代码finally块部分覆盖问题

我在构建流程中运行SonarQube检测代码覆盖率,.NET 8代码包含try/catch/finally块:try块使用FTP客户端连接FTP服务器,finally块执行断开连接操作。

finally块代码截图

SonarQube报告中,finally块的最后一行标记为红色,显示“部分覆盖测试(4个条件中覆盖2个)”,但未明确指出缺失覆盖的具体条件。我已编写测试覆盖以下场景:

  • 正常流程(_client初始化成功,Disconnect()执行无异常)
  • 多种触发finally块执行的异常场景(try块抛出异常,进入finally)
  • 模拟_client.Disconnect()抛出异常,验证未记录“Finish disconnecting client”文本

想请教:该代码行可能缺失哪些条件的覆盖?SonarCloud是否有办法显示具体缺失项?


回答

一、可能缺失覆盖的条件

结合代码结构(finally块内嵌套try/catch,使用?.调用Disconnect()),SonarQube统计的4个条件对应以下分支,你大概率遗漏了其中两个:

  1. _client为null的场景:如果try块中_client初始化失败(比如实例化FTP客户端时抛出异常),finally块执行时_client是null,此时_client?.Disconnect()会直接跳过,直接执行_logger.LogInformation("Finish disconnecting client"),这个分支你可能未覆盖。
  2. _client不为null,但Disconnect()执行无异常,且try块本身抛出异常的场景:你可能测了正常流程(try块无异常+Disconnect成功),但没测“try块抛出异常→进入finally→Disconnect成功→执行成功日志”这个分支。

二、SonarCloud查看具体缺失项的方法

SonarCloud支持查看分支覆盖的具体缺失项:

  • 进入项目的Code Coverage页面,找到对应的代码文件并点击进入;
  • 在代码详情视图中,将鼠标悬停在标记为部分覆盖的代码行上,会弹出提示框,明确显示哪些分支未被覆盖;
  • 也可以在文件的覆盖率详情面板中,查看每行的分支覆盖统计,包括未覆盖分支的具体描述。

内容的提问来源于stack exchange,提问作者g0np

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 00:52:23