HarmonyOS / ArkTS 测试¶
本文件通过 HarmonyOS 特有的测试实践扩展 common/testing.md。
测试框架¶
HarmonyOS 使用具有 @ohos.test 功能的内置测试框架:
- 单元测试:放置在
src/ohosTest/ets/test/ - UI 测试:组件测试使用
@ohos.UiTest - 仪器测试:在设备/模拟器上运行
测试目录结构¶
module/
|-- src/
| |-- main/ets/ # プロダクションコード
| |-- ohosTest/ets/ # テストコード
| |-- test/
| | |-- Ability.test.ets
| | |-- List.test.ets
| |-- TestAbility.ets
| |-- TestRunner.ets
运行测试¶
# モジュールのすべてのテストを実行する
hvigorw testHap -p product=default
# 接続されたデバイスでテストを実行する
hdc shell aa test -b com.example.app -m entry_test -s unittest /ets/TestRunner/OpenHarmonyTestRunner
单元测试示例¶
import { describe, it, expect } from '@ohos/hypium';
export default function UserViewModelTest() {
describe('UserViewModel', () => {
it('should_initialize_with_empty_state', 0, () => {
const vm = new UserViewModel();
expect(vm.userName).assertEqual('');
expect(vm.isLoading).assertFalse();
});
it('should_update_user_name', 0, () => {
const vm = new UserViewModel();
vm.updateUserName('Alice');
expect(vm.userName).assertEqual('Alice');
});
it('should_handle_empty_input', 0, () => {
const vm = new UserViewModel();
vm.updateUserName('');
expect(vm.userName).assertEqual('');
expect(vm.hasError).assertFalse();
});
});
}
UI 测试示例¶
import { describe, it, expect } from '@ohos/hypium';
import { Driver, ON } from '@ohos.UiTest';
export default function HomePageUITest() {
describe('HomePage_UI', () => {
it('should_display_title', 0, async () => {
const driver = Driver.create();
await driver.delayMs(1000);
const title = await driver.findComponent(ON.text('Home'));
expect(title !== null).assertTrue();
});
it('should_navigate_to_detail_on_click', 0, async () => {
const driver = Driver.create();
const button = await driver.findComponent(ON.id('detailButton'));
await button.click();
await driver.delayMs(500);
const detailTitle = await driver.findComponent(ON.text('Detail'));
expect(detailTitle !== null).assertTrue();
});
});
}
HarmonyOS TDD 工作流¶
遵循适配 HarmonyOS 的标准 TDD 循环:
- RED:在
ohosTest/ets/test/中编写失败的测试 - GREEN:在
main/ets/中实现使测试通过的最小代码 - REFACTOR:在保持测试绿色的同时清理代码
- 构建:运行
hvigorw assembleHap以确认编译 - VERIFY:在设备/模拟器上运行测试
测试覆盖率要求¶
- 所有关键应用代码(ViewModels、服务、工具)至少 80% 覆盖率
- 单元测试:所有工具函数、ViewModel 逻辑、数据模型
- 集成测试:API 调用、数据库操作、跨模块交互
- E2E / UI 测试:关键用户流程(登录、导航、数据提交)
- 测试边缘情况:空数据、网络错误、权限拒绝
测试最佳实践¶
- 保持测试独立 — 不在测试之间共享可变状态
- 在单元测试中模拟网络调用和系统 API
- 使用有意义的测试名称:
should_[期待される動作]_when_[条件] - 测试 V2 状态管理的响应性:确认
@Trace属性触发 UI 更新 - 测试 Navigation 流程:确认
NavPathStack的 push/pop/replace 操作 - 避免测试框架内部 — 专注于业务逻辑和用户可见行为
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 ev/ECC