当前位置: 首页 > ai >正文

什么是单元测试的“覆盖率”

1. 先搞清楚“覆盖率”是啥?​

打个比方,你写完作业(代码),老师(测试)要检查是不是每道题都做对了。覆盖率就是说老师检查了多少题。比如:

  • 行覆盖率​:老师看了你作业的每一行字吗?
  • 分支覆盖率​:遇到选择题(比如 if/else),每个选项都检查了吗?
  • 方法覆盖率​:作业里的每道大题(比如数学的应用题、语文的作文)都批改了吗?

覆盖率低?说明老师偷懒,没检查到位!


2. 怎么让老师(测试)更负责?​

➀ 别只测“好学生”,也得盯“差生”​
  • 例子​:你写了个算数方法 add(2,3),测试了正常情况,结果是对的。但如果有傻子传了个负数呢?或者传了个超大数字?
  • 怎么办​:
    就像老师不能只看学霸的作业,得故意出点刁钻题:
    @Test
    void testAdd() {// 正常情况assertEquals(5, calculator.add(2, 3));// 刁钻情况:负数、零、超大数assertEquals(-1, calculator.add(2, -3));assertEquals(0, calculator.add(0, 0));assertEquals(2147483647, calculator.add(2147483647, 0)); 
    }
➁ 别放过“如果...就...”这种选择题
  • 例子​:代码里有个 if(成绩>=60) 发奖状,else 叫家长。你只测了考 80 分的同学,那刚及格的和不及格的呢?
  • 怎么办​:
    就像老师得把考 59、60、90 分的学生都叫来办公室溜一圈:
    @Test
    void testScore() {// 考了59分(叫家长)assertEquals("叫家长", teacher.checkScore(59));// 考了60分(发奖状)assertEquals("发奖状", teacher.checkScore(60));// 考了90分(发奖状)assertEquals("发奖状", teacher.checkScore(90));
    }
➂ 别以为“出错代码”不会被执行!​
  • 例子​:代码里有个 try-catch 处理报错,但测试时一直走正常流程,导致 catch 里的代码像个摆设。
  • 怎么办​:
    就像老师得假装把墨水洒在作业本上,看学生会不会正确处理(比如拿纸巾擦):
    @Test
    void testError() {// 模拟一个会报错的操作(比如网络断开)when(mockDatabase.connect()).thenThrow(new NetworkException());// 看程序会不会自己擦“墨水”(比如记录日志、回滚操作)assertTrue(logger.hasError()); 
    }

3. 用 IDEA 当“雷达”,扫出漏网之鱼

  • Step 1​:在 IDEA 里右键点测试类,选 ​Run with Coverage​(就像打开“作业批改雷达”)。
  • Step 2​:看代码左边会出现颜色标记:
    • 绿色​:老师检查过这行,没问题!
    • 红色​:老师根本没看这行!(赶紧补测试!)
    • 黄色​:老师看了但没仔细查(比如 if 只检查了 true,没查 false)。

4. 偷懒小技巧

  • 技巧 1​:遇到简单代码(比如自动生成的 getter/setter),直接忽略!别为了覆盖率而测试。
  • 技巧 2​:用 IDEA 的 ​Generate​ 功能(Ctrl+Enter)快速生成测试方法骨架,省得手打。
  • 技巧 3​:如果死活测不到某行代码(比如 private 方法),别硬刚,可能这代码根本没用,直接删掉!

5. 千万别踩的坑!​

  • 坑 1​:为了覆盖率强行凑数。
    @Test
    void test() {calculator.add(1,1); // 没写断言!就像老师看了作业但不打分
    }
  • 坑 2​:测了一堆无关紧要的代码(比如 main 方法),核心逻辑却没测。
  • 坑 3​:测完一次就再也不管了,结果代码改了,测试全废。

总结

提高覆盖率就像让老师认真批改作业:

  1. 查缺补漏​:用 IDEA 的“雷达”找到没检查的代码。
  2. 专挑刺儿​:多测边界值、异常情况。
  3. 别当强迫症​:关键代码覆盖到位就行,鸡毛蒜皮的别纠结!

虽然说,测试是为了少加班修 Bug,但是加班提高单元测试覆盖率的xx企业也是大有人在。

http://www.xdnf.cn/news/82.html

相关文章:

  • 计算机视觉——基于使用 OpenCV 与 Python 实现相机标定畸变校正
  • 安全测试报告模板
  • PyTorch 浮点数精度全景:从 float16/bfloat16 到 float64 及混合精度实战
  • pnpm解决幽灵依赖问题
  • [Unity]-[UI]-[Prefab] 关于UGUI UI Prefab的制作技巧
  • C++: 类和对象(中)
  • 避免IP地址关联,多个手机设备的完美公网IP问题
  • Django ORM 定义模型
  • 【html】a标签target属性以及扩展应用
  • 2025TGCTF Web WP复现
  • 2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(六级)答案 + 解析
  • 多线程编程的简单案例——单例模式[多线程编程篇(3)]
  • 前端零基础入门到上班:Day7——表单系统实战全解析
  • 文献总结:NIPS2023——车路协同自动驾驶感知中的时间对齐(FFNet)
  • node.js 基础
  • 9.Rust+Axum 测试驱动开发与性能优化全攻略
  • 韩媒专访CertiK创始人顾荣辉:黑客攻击激增300%,安全优先的破局之路
  • 在Vmware15(虚拟机免费) 中安装纯净win10详细过程
  • Google Gemini 系列AI模型 的详细解析,涵盖其技术特点、版本差异、应用场景及优势
  • 网络417 路由转发2 防火墙
  • 2025第十七届“华中杯”大学生数学建模挑战赛题目B 题 校园共享单车的调度与维护问题完整成品正文33页(不含附录)文章思路 模型 代码 结果分享
  • 部署若依前后端分离
  • Qt 信号与槽复习
  • [数据结构]哈希表
  • PTA:模拟EXCEL排序
  • 【C++面向对象】封装(下):探索C++运算符重载设计精髓
  • 【软考-系统架构设计师】设计模式三大类型解析
  • 简单接口工具(ApiCraft-Web)
  • 从0开始掌握动态规划
  • 目标分割模型优化自身参数都是梯度下降算法吗?