头图

HarmonyOS Next单元测试入门

在软件开发的世界里,单元测试是保障代码质量、提升软件稳定性的关键环节,对于 HarmonyOS Next 来说也不例外。本文我们深入探讨一下 HarmonyOS Next 中的单元测试。

在HarmonyOS NEXT应用单元测试可以在测试框架下进行,测试框架由核心模块和扩展模块组成。其中核心模块是测试框架的最小集,包含执行必备核心接口和逻辑。扩展模块是在核心模块的基础上增加一些常用能力,例如用例超时控制、用例筛选、数据驱动、压力测试等。核心模块采用插件化机制,提供接入能力和运行时上下文,扩展模块通过插件的方式接入。

在HarmonyOS Next中,自动化测试框架arkxtest,作为工具集的一部分,支持JS/TS语言的单元测试框架(JsUnit)及UI测试框架(UiTest)。JsUnit提供单元测试用例执行能力,提供用例编写基础接口,生成对应报告,用于测试系统或应用接口。文本我们重点介绍JsUnit原理和使用。

JsUnit单元测试原理

UiTest通过简洁易用的API提供查找和操作界面控件能力,支持用户开发基于界面操作的自动化测试脚本。

HarmonyOS Next中单元测试主要功能如下面官方图片:
image.png

单元测试运行基本流程如下图:
image.png

主要流程就是将编写好的测试用例通过aa命令行运行到手机自动化测试框架执行,最后将执行结果返回到控制台。

JsUnit单元测试操作步骤

但我们新建一个HarmonyOS Next工程时,在src目录下会有四个子目录:
image.png

其中ohosTest和test就是用来存放测试代码的目录。支持创建Instrument Test和Local Test:

  • Instrument Test:测试用例存放在ohosTest测试目录下,需要运行在设备或模拟器上,支持单元测试和UI测试。
  • Local Test:测试用例存放在test测试目录下,不需要运行在设备或模拟器上,支持单元测试。

接下来我们编写单元测试脚本:
在单元测试框架,测试脚本需要包含如下基本元素:

  1. 依赖导包,以便使用依赖的测试接口。
  2. 测试代码编写,主要编写测试代码的相关逻辑,如接口调用等。
  3. 断言接口调用,设置测试代码中的检查点,如无检查点,则不可认为一个完整的测试脚本。

下面是一个启动测试页面,检查设备当前显示的页面是否为预期页面得测试用例:

import { describe, it, expect } from '@ohos/hypium';
import { abilityDelegatorRegistry } from '@kit.TestKit';
import { UIAbility, Want } from '@kit.AbilityKit';

const delegator = abilityDelegatorRegistry.getAbilityDelegator()
const bundleName = abilityDelegatorRegistry.getArguments().bundleName;
function sleep(time: number) {
  return new Promise<void>((resolve: Function) => setTimeout(resolve, time));
}
export default function abilityTest() {
  describe('ActsAbilityTest', () =>{
    it('testUiExample',0, async (done: Function) => {
      console.info("uitest: TestUiExample begin");
      //start tested ability
      const want: Want = {
        bundleName: bundleName,
        abilityName: 'EntryAbility'
      }
      await delegator.startAbility(want);
      await sleep(1000);
      //check top display ability
      const ability: UIAbility = await delegator.getCurrentTopAbility();
      console.info("get top ability");
      expect(ability.context.abilityInfo.name).assertEqual('EntryAbility');
      done();
    })
  })
}

下面是执行默认创建的测试用例的结果:
image.png

总结

本文介绍了HarmonOS Next单元测试的原理,使用步骤,介绍了单元测试相关概念等。


凡事提前
1.3k 声望352 粉丝

互联网从业者,做过Android、UI自动化、UI自动化框架、测试开发,目前在研究HarmonyOS 自动化测试相关技术。