HarmonyOS 应用开发《掌上英语》第61篇:HarmonyOS 单元测试——从 LocalUnit.test 到 Ability.test
HarmonyOS 单元测试——从 LocalUnit.test 到 Ability.test一、测试在项目中的地位在 11 模块架构的英语学习 App 中测试是保障代码质量的关键手段。每个模块homePage、topicPage、minePage 以及 commonLib 等都包含了两种测试目录src/test/和src/ohosTest/。commons/commonLib/ └── src/ ├── test/ │ ├── List.test.ets # 测试列表入口 │ └── LocalUnit.test.ets # 本地单元测试 ├── ohosTest/ │ ├── ets/ │ │ └── test/ │ │ ├── Ability.test.ets # Instrumentation 测试 │ │ └── List.test.ets # 测试列表入口 │ └── module.json5这两种测试目录代表了 HarmonyOS 中两种不同的测试类型LocalUnitTest和InstrumentationTestohosTest。二、test 目录 vs ohosTest 目录src/test/目录LocalUnitTest运行在本地 JVM 上不依赖真机或模拟器只能测试纯 TypeScript/ArkTS 逻辑代码不能调用 kit API如 UI 组件、系统服务运行速度快适合频繁执行src/ohosTest/目录InstrumentationTest运行在真机或模拟器上可以测试完整的能力调用包括 UI 组件、系统 API需要打包安装到设备上运行运行速度慢通常作为 CI 流程的一部分选择原则纯逻辑测试如工具函数、模型计算放在 LocalUnitTest涉及 UI 渲染、系统 API 的测试放在 ohosTest。三、LocalUnitTest纯逻辑测试实践LocalUnitTest 适合测试 ViewModel 中的计算方法、数据模型的序列化/反序列化、工具函数的正确性。我们的项目中LocalUnit.test.ets文件的内容模板import{describe,beforeAll,beforeEach,afterEach,afterAll,it,expect}fromohos/hypium;exportdefaultfunctionlocalUnitTest(){describe(localUnitTest,(){beforeAll((){// 在所有测试用例之前执行一次});beforeEach((){// 在每个测试用例之前执行});afterEach((){// 在每个测试用例之后执行});afterAll((){// 在所有测试用例之后执行一次});it(assertContain,0,(){letaabc;letbb;expect(a).assertContain(b);expect(a).assertEqual(a);});});}这个模板使用了ohos/hypium测试框架这是 HarmonyOS 官方提供的轻量级测试框架。它提供了类似于 Jest 的 API 风格describe、it、expect。在实际项目中可以扩展的测试用例it(WordCard constructor test,0,(){constcardnewWordCard(1,apple,/ˈæpl/,n.,苹果,I eat an apple.,我吃了一个苹果。);expect(card.word).assertEqual(apple);expect(card.translation).assertEqual(苹果);expect(card.category).assertEqual(basic);});it(PreferenceUtil put and get,0,(){PreferenceUtil.getInstance(test).put(key,value);constresultPreferenceUtil.getInstance(test).get(key);expect(result).assertEqual(value);});需要注意的是PreferenceUtil 依赖ContextUtils和系统 Preferences API因此严格的本地单元测试无法测试它——这应该放在 ohosTest 中。四、InstrumentationTestUI 测试实践InstrumentationTest 运行在真机或模拟器上可以测试 UI 组件的创建和交互。Ability.test.ets的典型内容import{describe,it,expect}fromohos/hypium;import{Driver,ON}fromohos.UiTest;exportdefaultfunctionabilityTest(){describe(AbilityTest,(){it(test_page_load,0,async(){// 创建 UI 测试驱动letdriverDriver.create();awaitdriver.delayMs(1000);// 查找页面上的文字元素lettextawaitdriver.findComponent(ON.text(英语学习));expect(text!null).assertTrue();});});}InstrumentationTest 的核心能力UI 组件查找通过Driver查找页面上的组件按文本、ID、类型模拟用户操作点击、滑动、输入页面跳转验证验证路由跳转后的页面内容状态验证验证 State/Local 变量的变化五、ohosTest 中的测试组织每个模块的 ohosTest 目录结构一致features/homePage/src/ohosTest/ets/test/ ├── Ability.test.ets # 核心测试文件 └── List.test.ets # 测试列表注册所有测试套件List.test.ets的作用是汇总所有测试套件importabilityTestfrom./Ability.test;exportfunctionTestList(){abilityTest();}这样做的好处是新增测试文件时只需要在List.test.ets中注册即可module.json5中配置的入口文件保持不变。ohosTest目录下的module.json5配置了测试模块的信息{ module: { name: homePage_ohosTest, type: test, srcPath: , description: HomePage test module, testRunner: ohosTestRunner } }六、测试策略与覆盖率在 11 模块架构下建议的测试策略是核心逻辑全覆盖commonLib 中的 ManagerPreferenceUtil、NewWordManager、AudioPlayer和 UtilsLogger、ContextUtils应该有完整的 LocalUnitTest 覆盖关键页面 UI 测试homePage 的 MainPage、topicPage 的 WordCardPage、minePage 的 MinePage 应该有 InstrumentationTest验证页面加载和基本交互边界情况测试数据处理函数如数据序列化、生词本增删改查需要测试边界情况空数据、重复数据、大数据量构建集成在hvigorfile.ts中配置运行测试的任务CI/CD 流水线中自动执行七、总结HarmonyOS 的测试体系提供了 LocalUnitTest 和 InstrumentationTest 两种互补的方式。LocalUnitTestsrc/test/负责纯逻辑的快速验证InstrumentationTestsrc/ohosTest/负责真机环境下的集成测试。在我们的项目中每个模块都遵循这种双测试目录的结构为代码质量提供了基础保障。开发者应该根据测试目标选择合适的测试类型并且保持测试与代码的同步演进。

相关新闻

家庭版流水面全链路搭建:从原理到实操的完整拆解

家庭版流水面全链路搭建:从原理到实操的完整拆解

1. 从“纳凉”到“仪式感”:流水面的文化内核与夏日情结 夏天一到,朋友圈里总少不了几张流水面的照片。竹子劈开做成的“水渠”,清澈的凉水载着素面顺流而下,食客们眼疾手快,用筷子从水中拦截属于自己的那一份&#xf…

2026/7/29 11:31:01 阅读更多 →
3分钟实现电影级视频抠像:MatAnyone一致性记忆传播技术深度解析

3分钟实现电影级视频抠像:MatAnyone一致性记忆传播技术深度解析

3分钟实现电影级视频抠像:MatAnyone一致性记忆传播技术深度解析 【免费下载链接】MatAnyone [CVPR 2025] MatAnyone: Stable Video Matting with Consistent Memory Propagation 项目地址: https://gitcode.com/gh_mirrors/ma/MatAnyone 在视频内容创作日益普…

2026/7/29 11:31:01 阅读更多 →
从1W到100W基金投资复盘01-今日持仓记录

从1W到100W基金投资复盘01-今日持仓记录

从今天起记录我的基金投资和仓位管理。当前持仓金额:9877.45元,盈亏:-31.56元。今日复盘:1、今日科创50指数继续大幅下跌,指数选择错误,好在仓位控制较低,对整体影响有限,暂停定投&a…

2026/7/29 11:30:00 阅读更多 →

最新新闻

Skills 体系:让你的 Agent 能力可复制、可迭代、可传承

Skills 体系:让你的 Agent 能力可复制、可迭代、可传承

为什么你需要 Skills 体系 如果你的 Agent 只靠 System Prompt 干活,有三个问题会越来越严重: 1. 规则膨胀。 你会在 System Prompt 里不断加规则。三个月后变成 2000 字,Agent 只记住了开头和结尾。Skills 让规则分类存储——Agent 写 C 代…

2026/7/29 11:42:17 阅读更多 →
4-Linux-不同发行版的差异-day11

4-Linux-不同发行版的差异-day11

Linux发行版核心差异整合要点 目录导航 1. 包管理器(差异最大,换家族需重学)2. 发布与更新策略3. 稳定性与定位差异4. 其他细节差异5. 总结 所有Linux发行版内核同源,底层命令、目录结构、权限机制等核心逻辑一致,差…

2026/7/29 11:42:17 阅读更多 →
TouchGFX嵌入式UI开发:中文显示与滚动文本框实战指南

TouchGFX嵌入式UI开发:中文显示与滚动文本框实战指南

1. 项目概述:从界面美化到核心功能在嵌入式图形界面开发中,TouchGFX以其强大的性能和与STM32生态的无缝集成,成为了许多工程师的首选。然而,当我们从炫酷的动画和精美的图片切换到最基础、最频繁的文本显示时,一个看似…

2026/7/29 11:42:17 阅读更多 →
稳压二极管原理与应用全解析:从核心机制到电路设计实战

稳压二极管原理与应用全解析:从核心机制到电路设计实战

1. 项目概述:从“神秘”的黑色小管说起如果你拆开过任何一块老式或现代的电路板,大概率会见过一种圆柱形的、带有一条色环的黑色小元件,它通常和电阻、电容们待在一起。很多刚入门电子的朋友会把它误认为是电阻,但老手们都知道&am…

2026/7/29 11:42:17 阅读更多 →
ssm 学院国有资产管理系统

ssm 学院国有资产管理系统

一、关键词学院国有资产管理系统、学院国有资产、学院国有资产信息管理、学院国有资产后台管理二、作品包含源码数据库万字设计文档全套环境和工具资源本地部署教程三、项目技术前端技术: Html、Css、Js、Vue3.2、Element-Plus后端技术:Java、SSM&#x…

2026/7/29 11:42:17 阅读更多 →
Scroll Reverser:告别Mac滚动方向混乱,3分钟实现多设备智能切换

Scroll Reverser:告别Mac滚动方向混乱,3分钟实现多设备智能切换

Scroll Reverser:告别Mac滚动方向混乱,3分钟实现多设备智能切换 【免费下载链接】Scroll-Reverser Per-device scrolling prefs on macOS. 项目地址: https://gitcode.com/gh_mirrors/sc/Scroll-Reverser 你是否曾经在MacBook的触控板和鼠标之间切…

2026/7/29 11:41:10 阅读更多 →

日新闻

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:00:23 阅读更多 →
AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础

AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础 在上一期「AI编程系列」中,我们学习了如何构建一个基础的 AI 问答系统,通过简单的输入输出让模型回应问题。但现实世界中的 AI 应用往往需要处理更复杂的场景:…

2026/7/29 0:00:23 阅读更多 →
AI智能体开发实战:从工具调用到企业级部署

AI智能体开发实战:从工具调用到企业级部署

1. 从被动问答到主动执行:AI Agent的范式转变过去两年,大语言模型最显著的应用形态是聊天机器人——用户提问,AI回答。但真正的生产力革命发生在2023年下半年:当AI学会主动调用工具完成任务时,生产力工具的历史被彻底改…

2026/7/29 0:00:23 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/28 8:29:16 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/28 5:03:42 阅读更多 →

月新闻