ArkTS单元测试实战:从环境搭建到核心断言解析

一、测试环境搭建

  1. 安装最新版DevEco Studio(推荐4.1+版本)
  2. 创建工程时勾选ohosTest测试目录
  3. 配置测试设备(模拟器或真机)

测试目录结构

二、两种测试类型对比

测试类型 存放目录 运行环境 支持能力
Instrument Test ohosTest 设备/模拟器 单元测试+UI测试
Local Test test 本地环境 基础单元测试

三、单元测试核心要素

// 测试框架基础模板
import { describe, it, expect } from '@ohos/hypium';
import AbilityDelegatorRegistry from '@ohos.app.ability.abilityDelegatorRegistry';

const delegator = AbilityDelegatorRegistry.getAbilityDelegator();

export default function abilityTest() {
  describe('PageNavigationTest', function() {
    it('StartMainAbility', 0, async (done) => {
      try {
        await delegator.startAbility({
          bundleName: 'com.example.myapp',
          abilityName: 'MainAbility'
        });
        
        const result = await delegator.getCurrentTopAbility();
        expect(result.abilityName).assertEqual('MainAbility');
        done();
      } catch (err) {
        done(err);
      }
    });
  });
}

四、断言机制深度解析

// 基础类型断言
it('ValidatePrimitiveType', 0, () => {
  const versionCode: number = 100;
  expect(versionCode).assertEqual(100);
});

// 对象属性断言
it('CheckDeviceInfo', 0, () => {
  const deviceInfo = {
    model: 'P50',
    resolution: '1080x2340'
  };
  expect(deviceInfo.model).assertContain('P50');
});

// 异步操作断言
it('AsyncDataValidation', 0, async () => {
  const fetchData = () => {
    return new Promise((resolve) => {
      setTimeout(() => {
        resolve({ code: 200 });
      }, 1000);
    });
  };
  
  const response = await fetchData();
  expect(response.code).assertEqual(200);
});

五、类型安全最佳实践

// 正确类型声明
interface NetworkResponse {
  success: boolean;
  data?: string;
  errorCode?: number;
}

it('NetworkRequestTest', 0, async () => {
  const result: NetworkResponse = await fetchData();
  expect(result.success).assertTrue();
});

// 错误用法示例(将导致编译失败)
/*
it('UnsafeTypeUsage', 0, () => {
  let res: any = unsafeOperation(); // 违反ArkTS类型约束
  expect(res).assertUndefined();
});
*/

六、测试覆盖率优化技巧

  1. 使用@ohos/hypium覆盖率统计功能
  2. 配置.testcfg文件设置过滤规则
  3. 结合CI/CD进行自动化覆盖率检测
// 覆盖率配置示例
{
  "include": ["src/main/ets/**/*.ts"],
  "exclude": ["**/test/**", "**/mock/**"]
}
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐