尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

HarmonyOS7 单元测试:从 @Test 到覆盖率

HarmonyOS7 单元测试:从 @Test 到覆盖率
📅 发布时间:2026/7/17 7:17:53

文章目录

    • 前言
    • 先有一个被测函数
      • 代码实现
    • 写测试文件
      • 核心代码
    • 怎么跑测试
      • 完整示例
    • 测试异步代码
      • 代码解析
    • 看覆盖率
    • 常见误区(小白必踩)
    • 完整可运行示例:单元测试
      • 实现拆解
    • 写在最后

前言

“我改了一行,不知道会不会弄坏别的功能”——这是没测试的噩梦。单元测试就是给代码买保险:你写个小测试,验证"这个函数输入 A 应该输出 B",以后谁改坏了立马红。

HarmonyOS 用@ohos/hypium测试框架。这篇文章从零写一个测试,讲清@Test、断言、怎么跑、怎么看覆盖率。

先有一个被测函数

测试的前提是:你要测的代码是"纯函数"或可独立调用的。比如一个工具:

代码实现

// utils/Calc.etsexportfunctionadd(a:number,b:number):number{returna+b}exportfunctionisEven(n:number):boolean{returnn%2===0}

写测试文件

测试文件一般放在src/test/下,用describe/it组织,用@Test标注用例:

核心代码

import{describe,it,expect}from'@ohos/hypium'import{add,isEven}from'../utils/Calc'exportdefaultfunctioncalcTest(){describe('Calc 测试',()=>{it('add 两数相加',0,()=>{expect(add(1,2)).assertEqual(3)})it('isEven 偶数判断',0,()=>{expect(isEven(4)).assertEqual(true)expect(isEven(3)).assertEqual(false)})})}

讲解:

  • describe('Calc 测试', ...):测试套件名,分组用。
  • it('用例名', 0, () => {...}):单个测试用例,0是用例标记位。
  • expect(x).assertEqual(y):断言,x 应该等于 y,不等就测试失败。

断言方法还有assertTrue、assertClose(近似相等)、assertFail等,按场景选。

怎么跑测试

在 DevEco 里,右键测试文件 → “Run ‘xxxTest’”,或用命令行。跑完会显示每个用例过没过:

完整示例

Calc 测试 ✓ add 两数相加 ✓ isEven 偶数判断 2 passed, 0 failed

红的就是要修的。测试的价值就在这一刻:改坏代码,立刻红给你看。

测试异步代码

涉及 Promise 的,用async/await:

代码解析

it('异步请求返回数据',0,async()=>{constres=awaitfetchUser(1)expect(res.id).assertEqual(1)})

看覆盖率

覆盖率告诉你"测试覆盖了多少代码行"。DevEco 开启覆盖率后,会标出哪些行没被测到(红色),提示你补用例。

  • 行覆盖率:多少行代码被执行过。
  • 分支覆盖率:if/else 各分支是否都测了。

目标不必 100%,但核心逻辑(计算、校验、状态机)尽量覆盖到。

常见误区(小白必踩)

误区说明
只测主流程不测边界add(1,2)过了就以为没问题,负数、空值、超大数才是容易出错的。
异步不await测试 Promise 忘了async/await,用例直接过但啥也没验。
不看覆盖率覆盖率告诉你哪些行没测到,红的那几行往往就是 bug 藏身处。

下面这段代码可以直接复制到 DevEco Studio 里运行。建议你边读边敲,改一改文末「动手改一改」里的参数,亲眼看看效果。

完整可运行示例:单元测试

用@Test验证一个纯函数。

实现拆解

// 用 Hypium 写单元测试import{describe,it,expect}from'@ohos/hypium'functionadd(a:number,b:number):number{returna+b}exportdefaultfunctiontestSuite(){describe('math',()=>{it('add 应该返回两数之和',0,()=>{expect(add(1,2)).assertEqual(3)})})}

你会看到什么:运行测试,Hypium 报告add(1,2) === 3通过。把断言改成assertEqual(4)会立刻变红,直观体现「测试即文档」。

动手改一改:

  • 加一个it('负数相加')覆盖边界。
  • 用expect(x).assertFail()故意制造失败,看报告样式。
  • 给被测函数加@Test标注做模块内联测试。

写在最后

单元测试不是负担,是改代码时的底气。套路就三步:导入被测函数 → 写it用例 →expect断言。从你最易出错的那个工具函数开始写第一个测试,跑通的那一刻,你会觉得"以后敢改代码了"。

建议把项目的"输入校验、金额计算、状态转换"这类核心逻辑都补上测试——它们最该被保护,也最容易被改坏。

相关新闻

  • 超聚变2288H V6服务器Ubuntu 24.04安装与优化指南
  • 为什么这款Linux备份神器值得关注?gh_mirrors/oth/others项目中的restic详解
  • FreeAskInternet:本地化AI搜索聚合与答案生成解决方案

最新新闻

  • CocoIndex实战指南:如何为AI代理构建实时更新的知识索引库
  • Preempt_RT在嵌入式系统中的应用:树莓派实时性能优化指南
  • QRemeshify:从杂乱三角面到完美四边形的Blender网格优化神器
  • 如何永久免费使用IDM:3种简单方法完整指南
  • Win10开机内存占用高的五大原因与优化方案
  • 2026年阜阳企业宣传片制作公司排行榜:会议活动拍摄_视频直播服务_形象宣传片_专题片_廉洁微电影_旅游宣传片_工业纪录片_纪录片_政企影像服务商TOP榜单 - 政企影像扫地僧

日新闻

  • 佛山青少年训练营推荐:军博营地实力顶尖 - 秋山寄远
  • 如何快速上手PvZ2 Gardendless:免费Web版植物大战僵尸2完整指南
  • jiuwen-deepsearch核心功能详解:规划-检索-反思三合一智能工作流

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号