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

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

文章目录

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

前言

“我改了一行,不知道会不会弄坏别的功能”——这是没测试的噩梦。单元测试就是给代码买保险:你写个小测试,验证"这个函数输入 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,不等就测试失败。

断言方法还有assertTrueassertClose(近似相等)、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断言。从你最易出错的那个工具函数开始写第一个测试,跑通的那一刻,你会觉得"以后敢改代码了"。

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

http://www.jsqmd.com/news/1205115/

相关文章:

  • Zephyr RTOS环境配置:STM32F103C8T6嵌入式开发实战指南
  • 纯Python实现XXTEA解密:原理、代码与实战指南
  • AI辅助VASP第一性原理计算:从环境配置到能带分析实战
  • 技术博客内容创作指南:如何选择有价值的技术主题
  • Chatterbox-TTS-Server与其他TTS服务对比:为什么选择它?
  • ISO 8317:2015 Child-Resistant Packaging Test
  • C++ 初谈模板
  • 为什么这款Linux备份神器值得关注?gh_mirrors/oth/others项目中的restic详解
  • Qwen3-TTS CPU部署实战:魔搭+OpenVINO端到端加速指南
  • 飞腾派4G版开发板U-Boot编译与交叉环境搭建指南
  • 超聚变2288H V6服务器Ubuntu 24.04安装与优化指南
  • CANN/asc-devkit WelfordUpdate分块
  • FreeAskInternet:本地化AI搜索聚合与答案生成解决方案
  • STM32F103指纹识别系统设计:从特征提取到嵌入式实现
  • 基于改进YOLOv8s的玫瑰鲜切花智能分级技术解析
  • 轻量级YOLOv11在焊缝缺陷检测中的优化实践
  • Ascend C WelfordUpdate归一化API
  • Trae不是大模型,而是AI编程工作流的智能调度中枢
  • 西安劳力士回收价格查询及靠谱回收平台实测排行(2026年7月最新) - 天价名表回收平台
  • 21.WSL中部署gnina分子对接程序ds
  • Gesture-Controlled-Virtual-Mouse自定义手势开发教程:扩展你的控制方式
  • 从零构建Alpine Linux rootfs并移植到RV1106开发板
  • 2026年7月最新烟台百达翡丽官方售后客服电话及服务网点地址查询 - 百达翡丽官方售后中心
  • 核桃派1B开发板与HC-SR04超声波测距实战
  • C语言自学指南:从环境搭建到项目实战的系统学习路径
  • 人形机器人量产真相:七道断层与泡沫基底
  • 浪琴中国官方售后服务中心|全部网点地址与官方客服电话权威信息声明(2026年7月更新) - 浪琴服务中心
  • Qwen2.5-Coder代码大模型架构解析与应用实践
  • Electron-Nuxt项目结构详解:轻松掌握主进程与渲染进程通信
  • 浪琴中国官方售后服务中心|官方地址及服务热线权威信息声明(2026年7月最新) - 浪琴官方售后服务中心