HarmonyOS Next单元测试入门
在软件开发的世界里,单元测试是保障代码质量、提升软件稳定性的关键环节,对于 HarmonyOS Next 来说也不例外。本文我们深入探讨一下 HarmonyOS Next 中的单元测试。
在HarmonyOS NEXT应用单元测试可以在测试框架下进行,测试框架由核心模块和扩展模块组成。其中核心模块是测试框架的最小集,包含执行必备核心接口和逻辑。扩展模块是在核心模块的基础上增加一些常用能力,例如用例超时控制、用例筛选、数据驱动、压力测试等。核心模块采用插件化机制,提供接入能力和运行时上下文,扩展模块通过插件的方式接入。
在HarmonyOS Next中,自动化测试框架arkxtest,作为工具集的一部分,支持JS/TS语言的单元测试框架(JsUnit)及UI测试框架(UiTest)。JsUnit提供单元测试用例执行能力,提供用例编写基础接口,生成对应报告,用于测试系统或应用接口。文本我们重点介绍JsUnit原理和使用。
JsUnit单元测试原理
UiTest通过简洁易用的API提供查找和操作界面控件能力,支持用户开发基于界面操作的自动化测试脚本。
HarmonyOS Next中单元测试主要功能如下面官方图片:
单元测试运行基本流程如下图:
主要流程就是将编写好的测试用例通过aa命令行运行到手机自动化测试框架执行,最后将执行结果返回到控制台。
JsUnit单元测试操作步骤
但我们新建一个HarmonyOS Next工程时,在src目录下会有四个子目录:
其中ohosTest和test就是用来存放测试代码的目录。支持创建Instrument Test和Local Test:
- Instrument Test:测试用例存放在ohosTest测试目录下,需要运行在设备或模拟器上,支持单元测试和UI测试。
- Local Test:测试用例存放在test测试目录下,不需要运行在设备或模拟器上,支持单元测试。
接下来我们编写单元测试脚本:
在单元测试框架,测试脚本需要包含如下基本元素:
- 依赖导包,以便使用依赖的测试接口。
- 测试代码编写,主要编写测试代码的相关逻辑,如接口调用等。
- 断言接口调用,设置测试代码中的检查点,如无检查点,则不可认为一个完整的测试脚本。
下面是一个启动测试页面,检查设备当前显示的页面是否为预期页面得测试用例:
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();
})
})
}
下面是执行默认创建的测试用例的结果:
总结
本文介绍了HarmonOS Next单元测试的原理,使用步骤,介绍了单元测试相关概念等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。