一 框架概述
单元测试框架(hypium)是HarmonyOS上的测试框架,提供测试用例编写、执行、结果显示能力,用于测试系统或应用接口。
表1 单元测试框架功能特性
二 安装使用
目前hypium以npm包的形式发布, 因此需要在Deveco Studio 工程级package.json内配置
"dependencies": {
"@ohos/hypium": "1.0.6" #最新版本号,可通过cmd命令"npm view @ohos/hypium version"查询
}
然后,在测试文件中引入
import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'
三 使用说明
3.1 基础流程
测试用例采用业内通用语法,describe代表一个测试套, it代表一条用例。
表2 测试套&用例接口定义列表
3.2 断言库
判断变量或对象的期望值与实际值,是否满足相关条件,否则抛出异常。
表3 断言功能列表
示例代码:
import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'
export default function abilityTest() {
describe('ActsAbilityTest', function () {
it('assertContain',0, function () {
let a = 'abc'
let b = 'b'
// Defines a variety of assertion methods, which are used to declare expected boolean conditions.
expect(a).assertContain(b)
expect(a).assertEqual(a)
})
})
}
3.3 Mock能力
约束限制
单元测试框架Mock能力hypium 1.0.1开始支持。
表4 mock能力接口列表
示例代码:
import {describe, expect, it, MockKit, when} from '@ohos/hypium';
export default function ActsAbilityTest() {
describe('ActsAbilityTest', function () {
it('testMockfunc', 0, function () {
console.info("it1 begin");
let mocker = new MockKit();
class ClassName {
constructor() {
}
method_1(arg) {
return '888888';
}
method_2(arg) {
return '999999';
}
}
let claser = new ClassName();
let mockfunc = mocker.mockFunc(claser, claser.method_1);
when(mockfunc)('test').afterReturnNothing();
expect(claser.method_1('test')).assertUndefined();
});
});
}
3.4 数据驱动
约束限制
单元测试框架数据驱动能力从hypium 1.0.2 版本开始支持
- 数据参数传递 : 为指定测试套、测试用例传递测试输入数据参数。
- 压力测试 : 为指定测试套、测试用例设置执行次数。
数据驱动可以根据配置参数来驱动测试用例的执行次数和每一次传入的参数,使用时依赖data.json配置文件,data.json与测试用例*.test.js|ets文件同目录,文件示例内容如下:
{
"suites": [
{
"describe": [
"actsAbilityTest"
],
"stress": 2,
"params": {
"suiteParams1": "suiteParams001",
"suiteParams2": "suiteParams002"
},
"items": [
{
"it": "testDataDriverAsync",
"stress": 2,
"params": [
{
"name": "tom",
"value": 5
},
{
"name": "jerry",
"value": 4
}
]
},
{
"it": "testDataDriver",
"stress": 3
}
]
}
]
}
表5 配置参数说明
示例代码:
在TestAbility目录下app.js|ets文件中导入data.json,并在Hypium.hypiumTest() 方法执行前,设置参数数据
import AbilityDelegatorRegistry from '@ohos.application.abilityDelegatorRegistry'
import { Hypium } from '@ohos/hypium'
import testsuite from '../test/List.test'
import data from '../test/data.json';
...
Hypium.setData(data);
Hypium.hypiumTest(abilityDelegator, abilityDelegatorArguments, testsuite)
...import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from '@ohos/hypium';
export default function abilityTest() {
describe('actsAbilityTest', function () {
it('testDataDriverAsync', 0, async function (done, data) {
console.info('name: ' + data.name);
console.info('value: ' + data.value);
done();
});
it('testDataDriver', 0, function () {
console.info('stress test');
});
});
}
四 执行测试脚本
DevEco Studio执行
通过点击按钮执行,当前支持以下执行方式
1、测试包级别执行,即执行测试包内的全部用例。
2、测试套级别执行,即执行describe方法中定义的全部测试用例。
3、测试方法级别执行,即执行指定it方法也就是单条测试用例。
查看测试结果
测试执行完毕后可直接在DevEco Studio中查看测试结果,如下图示例所示:
五 测试源码
https://gitee.com/harmonyos_samples/js-unit.git