跳转至

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 循环:

  1. RED:在 ohosTest/ets/test/ 中编写失败的测试
  2. GREEN:在 main/ets/ 中实现使测试通过的最小代码
  3. REFACTOR:在保持测试绿色的同时清理代码
  4. 构建:运行 hvigorw assembleHap 以确认编译
  5. VERIFY:在设备/模拟器上运行测试

测试覆盖率要求

  • 所有关键应用代码(ViewModels、服务、工具)至少 80% 覆盖率
  • 单元测试:所有工具函数、ViewModel 逻辑、数据模型
  • 集成测试:API 调用、数据库操作、跨模块交互
  • E2E / UI 测试:关键用户流程(登录、导航、数据提交)
  • 测试边缘情况:空数据、网络错误、权限拒绝

测试最佳实践

  • 保持测试独立 — 不在测试之间共享可变状态
  • 在单元测试中模拟网络调用和系统 API
  • 使用有意义的测试名称:should_[期待される動作]_when_[条件]
  • 测试 V2 状态管理的响应性:确认 @Trace 属性触发 UI 更新
  • 测试 Navigation 流程:确认 NavPathStack 的 push/pop/replace 操作
  • 避免测试框架内部 — 专注于业务逻辑和用户可见行为

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 ev/ECC