HarmonyOS7 单元测试:从 @Test 到覆盖率
文章目录前言先有一个被测函数代码实现写测试文件核心代码怎么跑测试完整示例测试异步代码代码解析看覆盖率常见误区小白必踩完整可运行示例单元测试实现拆解写在最后前言“我改了一行不知道会不会弄坏别的功能”——这是没测试的噩梦。单元测试就是给代码买保险你写个小测试验证这个函数输入 A 应该输出 B以后谁改坏了立马红。HarmonyOS 用ohos/hypium测试框架。这篇文章从零写一个测试讲清Test、断言、怎么跑、怎么看覆盖率。先有一个被测函数测试的前提是你要测的代码是纯函数或可独立调用的。比如一个工具代码实现// utils/Calc.etsexportfunctionadd(a:number,b:number):number{returnab}exportfunctionisEven(n:number):boolean{returnn%20}写测试文件测试文件一般放在src/test/下用describe/it组织用Test标注用例核心代码import{describe,it,expect}fromohos/hypiumimport{add,isEven}from../utils/CalcexportdefaultfunctioncalcTest(){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(){constresawaitfetchUser(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}fromohos/hypiumfunctionadd(a:number,b:number):number{returnab}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断言。从你最易出错的那个工具函数开始写第一个测试跑通的那一刻你会觉得以后敢改代码了。建议把项目的输入校验、金额计算、状态转换这类核心逻辑都补上测试——它们最该被保护也最容易被改坏。