news 2026/10/17 6:56:26

鸿蒙7 工程质量实战 05|单元测试从哪里开始

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
鸿蒙7 工程质量实战 05|单元测试从哪里开始

纯逻辑与数据转换测试

很多功能第一版都能跑,但“能跑”和“做稳”之间还有一段距离。纯逻辑与数据转换测试就是这种很容易被忽略、后期又经常返工的问题。

这一篇不堆 API。我们从真实开发场景切入,先看为什么会出问题,再写一个最小实现,然后补连续操作、异常路径和生命周期。目标不是把代码写得花,而是让下一次需求变化时还能放心改。

1. 先看最常见的误区

开发时最容易只盯结果:按钮点了有反应、页面能跳、数据出来了,就认为这一块结束了。真实项目里,用户连续点击、快速返回、切后台、内容突然变长,才是问题集中出现的时候。

所以我更建议先问三个问题:这段行为由什么状态驱动?中途失败后怎么恢复?页面离开后还有没有任务继续执行?

这三个问题想清楚,很多“偶现 bug”会少一半。

2. 先写最小核心

expect(formatAmount(12)).assertEqual('12.00')

示例故意保持短。先让行为可验证,再决定是否抽组件或工具层。过早抽象往往只是把简单问题分散到更多文件里。

3. 状态来源必须清楚

一个状态最好有明确的拥有者。父组件和子组件都随意修改,同一个异步回调又再改一次,出了问题就很难查。

局部行为尽量让局部组件自己管理;真正影响整个页面的状态再提升。这个原则放到动画、手势、日志、配置、测试里都成立:职责越明确,排错越快。

4. 连续操作比第一次操作更重要

第一次通常没问题。真正值得测的是连续点五次、操作一半返回、失败以后再来一次。

如果逻辑存在处理中状态,记得防重复,并在所有路径恢复:

this.processing = true try { await this.doWork() } catch (e) { console.error('[单元测试从哪里开始] failed') } finally { this.processing = false }

finally没什么炫技,但它能解决很多“第二次为什么不工作”的问题。

5. 生命周期别忘了

页面离开以后,定时器、监听、异步任务、动画回调是否还需要继续?这是很实际的问题。

创建时注册的能力,要想清楚什么时候释放。页面已经不可见时还频繁更新状态,不仅浪费资源,也可能制造难复现的问题。

6. 调试时别先清缓存

我一般沿调用链查:事件触发了吗?方法进入了吗?状态改了吗?异步有没有异常?生命周期是不是已经变化?

日志尽量短,并带模块名。敏感数据不要打印,大对象也不要每次整包输出。真正需要的是能快速判断“代码走到哪一步”。

7. 别为了高级而高级

单元测试从哪里开始并不意味着效果越复杂越好。交互反馈应该克制,工程封装也应该克制。

一个简单功能拆十层,不叫工程化;每个按钮都加一堆动画,也不叫体验好。能让用户明确感知、能让开发者快速理解,就是更实用的标准。

8. 给失败留一条路

成功路径大家都会写,真正拉开质量差距的是失败以后发生什么。

任务失败后状态能不能回去?页面有没有兜底?用户能不能重试?资源有没有释放?这些都应该在写功能时一起考虑,而不是上线前补。

9. 把边界场景主动造出来

把文本改成长一点,把数据变成空,把操作速度加快,把页面快速切走。不要等测试同学帮你发现所有边界。

开发阶段主动“破坏”一次自己的功能,通常能提前发现不少布局、状态和生命周期问题。

10. 代码审查时我会看什么

第一,职责能不能一句话说清。第二,失败后是否恢复。第三,离开页面后是否还有无意义任务。第四,改需求时需要动多少地方。

如果一个小改动需要全局搜索十几个文件,通常说明边界已经开始模糊。

11. 用户看到的是结果,不是架构

用户不知道你用了什么模式,他们只知道点击有没有反馈、页面会不会卡、失败后能不能继续。

工程治理也是一样。日志、测试、资源管理用户看不见,但这些东西决定了线上故障能不能更少、定位能不能更快。

12. 示例代码不是万能模板

教程为了讲清一个点会省略很多业务上下文。放进自己的项目时,要结合团队已有结构调整。

真正值得带走的是判断方法:为什么放这里、为什么要恢复、为什么要拆或不拆。理解这些,比复制一段代码更有用。

总结

这一篇围绕纯逻辑与数据转换测试,核心不是记 API,而是建立稳定的开发顺序:先确认职责和状态,再写最小实现,然后补异常、连续操作和生命周期。HarmonyOS 7 的能力本身并不难调用。真正让项目越来越稳的,是这些看起来不起眼的工程习惯。从现有项目找一个最接近本篇的功能,只改一个最明显的问题。改完后连续操作五次,再快速切页返回一次,看看状态和体验是否仍然正常。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/17 6:56:02

从一套校园网威胁监测方案到论文交稿:信安人的 AI 工具怎么选?

先把场景说具体:假如你是电子与信息大类 / 计算机类 / 信息安全技术应用专业的学生,正在做毕业设计——“面向校园网的 Web 安全威胁监测与日志审计方案设计与实现”。 你通常要交这些东西: 一份符合学校规范的毕业论文;网络拓扑、…

作者头像 李华
网站建设 2026/10/17 6:53:55

Harbor私有镜像仓库部署与运维实践:从架构到避坑指南

一套业务系统跑了一两年,环境中几十上百个容器,镜像分散在各台机器甚至每个人电脑里,等到要统一发版、回滚版本的时候,才发现连一个准确的镜像清单都凑不出来。这种场景我想很多团队都经历过。所以当我的某位合作伙伴第一次提出“…

作者头像 李华
网站建设 2026/10/17 6:53:15

开放研究(OpenResearch)工作流搭建指南:从可复现到自动化发布

1. 我为什么把研究工作完全搬到“开放”状态老实说,两年前如果有人告诉我,要把自己还没做完的课题、原始数据、失败实验全部挂到网上让人围观,我会觉得这人有毛病。但今天我不光自己这么干,还带着团队里几个年轻学生一起这么干&am…

作者头像 李华
网站建设 2026/10/17 6:52:38

毕设还没头绪?这份公司资产网站源码+论文资料,建议先收藏!

做毕业设计最头疼的是什么? 不是代码写不出来,而是明明学过不少知识,真要自己做一个完整项目时,却不知道从哪里开始。 系统功能怎么设计?代码结构怎么组织?论文又该怎么写,才能把整个项目讲清楚…

作者头像 李华
网站建设 2026/10/17 6:52:37

2026-10-16:交替数列的最大元素。用go语言,给定三个整数 n、s、m。现在要构造一个包含 n 个整数的序列,其中第一个数必须等于 s。序列中相邻数字的大小关系要不断反转:可以从“下降、上升、

2026-10-16:交替数列的最大元素。用go语言,给定三个整数 n、s、m。现在要构造一个包含 n 个整数的序列,其中第一个数必须等于 s。序列中相邻数字的大小关系要不断反转:可以从“下降、上升、下降”这样开始,也可以从“上…

作者头像 李华