代码覆盖率
在 IntelliJ IDEA 中,代码覆盖率让您分析特定运行期间执行了哪些代码行。 它有助于确定由测试覆盖的代码份额,并识别缺乏足够测试覆盖的领域。
启用 Code Coverage for Java 插件
此功能依赖于 Java 代码覆盖率插件,该插件在 IntelliJ IDEA 中默认捆绑并启用。 如果相关功能不可用,请确保您没有禁用插件。
按 Ctrl+Alt+S 打开设置,然后选择 。
打开 已安装 选项卡,找到 针对 Java 的代码覆盖率 插件,并选中插件名称旁边的复选框。
使用覆盖率运行
运行覆盖率分析的入口点与您通常用来 运行应用程序的相同:
覆盖分析会在附加 coverage agent 的情况下执行相应的运行配置。 此代理会修改字节码以逐行跟踪执行情况。 执行完成后,分析结果会出现在 IDE 中。
覆盖套件
覆盖率套件是某次特定运行的代码覆盖率数据集合 每个覆盖率套件都会存储来自单个运行配置(如果是 使用覆盖率运行 )或 导入的覆盖率数据文件的数据。
IntelliJ IDEA 将覆盖率套件存储在 coverage 文件夹的 IDE 系统目录中:
%LOCALAPPDATA%\JetBrains\IntelliJIdea%instance-version%\coverage
~/Library/Caches/JetBrains/IntelliJIdea%instance-version%/coverage
~/.cache/JetBrains/IntelliJIdea%instance-version%/coverage
IntelliJ IDEA 可以同时显示一个或多个覆盖率套件的结果,并可选择要显示哪些套件。 如果选中了多个套件,IDE 会显示它们的合并结果:也就是说,如果某个套件中某行被执行过,则认为该行已被覆盖。
选择要显示的覆盖率套件
在主菜单中,转到 (Ctrl+Alt+F6)。
在打开的 选择要显示的覆盖率套件 对话框中,选择要显示结果的套件。
如果想隐藏所有代码覆盖率结果,请点击 无覆盖 这会取消选择所有覆盖率套件并关闭对话框。

点击 显示所选项。
IntelliJ IDEA 会加载代码覆盖率结果并打开 覆盖率工具窗口
添加和移除覆盖率套件
如果想查看在 IntelliJ IDEA 之外(例如由构建服务器或其他开发者)生成文件中的代码覆盖率结果,可以将该文件单独添加为覆盖率套件 这适用于由 JaCoCo ( .exec 或 .xml )和 IntelliJ IDEA 运行器( .ic )生成的文件
你也可以从 IDE 移除套件,或从磁盘彻底删除它们。
在主菜单中,转到 (Ctrl+Alt+F6)。
在打开的 选择要显示的覆盖率套件 对话框中,从工具栏选择操作:
如需导入外部覆盖率文件,请点击
添加 ,然后浏览文件。
如需仅从 IDE 移除覆盖率套件但保留磁盘上的文件,请选择该套件并点击
移除。
如需同时从 IDE 和磁盘删除覆盖率套件,请选择该套件并点击
删除。
读取覆盖率数据
IntelliJ IDEA 显示的覆盖率结果在:
覆盖率 工具窗口
项目 工具窗口
编辑器
代码覆盖率结果显示在 覆盖率 工具窗口、 项目 工具窗口中,以及在您 至少使用覆盖率运行一次运行配置后显示在编辑器中。
项目工具窗口
项目 工具窗口显示:
目录中包含的类和行的百分比
类覆盖方法和行的百分比

覆盖率工具窗口
该报告按 类、方法、代码行和分支的覆盖率细分项目。
分支覆盖率显示在 if-else 或 switch 语句中执行的分支的百分比。 JaCoCo 运行器和启用 Branch Coverage选项的 IntelliJ IDEA 运行器均可使用。

覆盖率 工具窗口有以下选项:
条目 | 描述 |
|---|---|
选择是否以层次结构显示包,或将结构扁平化以在同一层级显示所有包。 | |
如果此选项开启,IntelliJ IDEA 会自动在编辑器中打开所选项目。 否则,您需要双击项目才能打开它们。 | |
如果启用此选项,IntelliJ IDEA 将自动在工具窗口中定位您在编辑器中打开的文件。 | |
生成代码覆盖率报告并将其保存到指定目录。 有关更多信息,请参见 生成覆盖率报告。 | |
从磁盘导入覆盖率套件。 | |
过滤覆盖结果。 您可以配置以下过滤器:
|
编辑器
编辑器会显示各代码行的覆盖率状态 状态通过装订区域的彩色标记表示:
绿色(
):该代码行已被执行黄色(
):该代码行被部分执行 当代码行包含条件逻辑(如 if/else语句、循环或switch语句)时会出现这种情况,但只有部分分支被运行红色(
):该代码行未被执行
如需打开某行的覆盖率统计弹窗,请点击其在装订区域的覆盖率标记。 根据你使用的覆盖率运行器不同,弹窗会显示不同内容:

对于 IntelliJ IDEA 运行器,弹窗可以显示以下信息:
命中次数 :代码行被执行的次数
如果该行包含条件逻辑(如
if/else语句、三元运算符或循环):真实命中 :条件为真的次数。
伪命中 :条件为假的次数。
如果代码行包含
switch语句:case <值> :某个具体 case 被执行的次数。

对于 JaCoCo 运行器,弹窗可以显示以下信息:
完全覆盖 :代码行已被执行 如果包含条件逻辑,所有可能的分支都会被运行
部分覆盖 :代码行已被执行,但只有部分条件逻辑分支被运行
未涵盖 :该代码行完全未被执行
已覆盖 <number>/<number> 分支 :条件逻辑中已运行分支数与分支总数的比值
此外,弹窗中还包含以下图标:
上一个 <覆盖状态>
跳转到上一个覆盖率标记并打开其统计信息。
下一个 <覆盖状态>
跳转到下一个覆盖率标记并打开其统计信息。
显示覆盖该行的测试
在单独的弹窗中显示覆盖当前代码行的测试
显示字节码
在单独的工具窗口中显示当前类的字节码。
编辑覆盖颜色
打开 以 自定义覆盖率标记的颜色。

隐藏覆盖率
停止在 IntelliJ IDEA 中显示覆盖率结果。
隐藏覆盖率数据
请执行以下操作之一:
在 覆盖率 工具窗口 () 中关闭覆盖统计选项卡。
点击页边的覆盖率高亮,然后选择 隐藏覆盖率。
生成覆盖率报告
请前往 ,或点击
,在 覆盖率 工具窗口中。
在 生成覆盖率报告 对话框中,指定用于存储生成报告的目录,并可选择 在浏览器中打开生成的 HTML 复选框。
配置代码覆盖率
在 IntelliJ IDEA 中,有适用于单个运行配置的覆盖设置,以及适用于每个项目的覆盖设置。
运行配置设置
对于每个 run configuration ,您可以指定覆盖分析的范围。
配置类和包
请前往 ,然后点击左侧面板上的运行配置。
点击 修改选项 ,然后在 代码覆盖率 下选择以下选项:
指定类和包 :选择此选项以配置您希望查看覆盖率信息的类和包。
排除类和包 :选择此选项以配置您想要从覆盖率中排除的类和包。
项目设置
对于项目,您可以配置以下选项:
在将覆盖应用到编辑器前显示选项。},{ | 每次运行覆盖率分析时,询问是否让最近收集的 覆盖套件处于活动状态。 在这种情况下,将会出现一个对话框,您可以选择仅显示新结果、将其添加到现有结果中,或将其保存到存储中但不进行查看。 |
不应用已收集的覆盖 | 在运行覆盖率分析后,只有在最近收集的 覆盖套件保存到存储中。 在这种情况下,新的覆盖率数据将不会显示,除非您明确选择相应的套件 。 |
将有效套件替换为新套件 | 隐藏当前显示的 覆盖率套件 ,并在运行覆盖率分析后使用新收集的覆盖率套件。 在这种情况下,只有最近一次覆盖率运行的结果会显示。 |
添加到有效套件 | 在运行覆盖率分析之后,将新收集的 覆盖套件添加到活动套件列表中。 这将保留现有的覆盖率结果,并在其基础上添加新的结果。 |
激活覆盖视图 | 每次运行覆盖分析时,请打开 覆盖工具窗口。 |
选择覆盖率运行程序 | 选择覆盖率运行器: %instance% 或 JaCoCo |
分支覆盖率 始终启用 JaCoCo | 为 |
按测试覆盖率跟踪 仅适用于 IntelliJ IDEA 运行器 | 让您追溯到执行某行代码的特定测试。 有关详细信息,请参阅 按测试覆盖率。 |
在测试文件夹中收集覆盖率 仅适用于 IntelliJ IDEA 运行器 | 收集测试的代码覆盖率统计数据。 默认情况下,覆盖数据仅显示在源根目录中被覆盖的行。 使用此选项以在测试根目录中启用覆盖收集。 |
忽略隐式声明的默认构造函数 仅适用于 IntelliJ IDEA 运行器 | 从覆盖率统计中排除隐式默认构造函数。 显式声明的无参数构造函数将继续包含在内。 |
排除注释 仅适用于 IntelliJ IDEA 运行器 | 排除由指定注解标记的元素从覆盖率结果中,例如 Lombok 的 |
更改覆盖率高亮的颜色
按 Ctrl+Alt+S 打开设置,然后选择 。
在组件列表中,展开 行覆盖率 节点并选择一种覆盖类型:例如, 完全、 部分覆盖 或 未涵盖。
点击 前景 字段以打开 选择颜色 对话框。
选择颜色,应用更改,然后关闭对话框。

按测试覆盖率
启用分支覆盖率时,IntelliJ IDEA 允许您跟踪每个测试覆盖了哪些代码行,反之亦然。
启用按测试覆盖率
在 中,启用 分支覆盖率 和 按测试覆盖率跟踪。
按行跟踪测试
要导航到覆盖特定行的测试:
点击编辑器边距中的覆盖率高亮显示,然后选择
显示覆盖该行的测试。

按测试跟踪行
仅高亮显示特定测试覆盖的行:
在 封面 工具窗口中,选择一个测试并点击工具栏上的 显示每个测试的覆盖率。



