未验证 提交 38673968 编写于 作者: O openharmony_ci 提交者: Gitee

!13047 优化《访问控制授权申请》章节部分描述内容

Merge pull request !13047 from zyjhandsome/master
......@@ -176,7 +176,7 @@ export default class EntryAbility extends UIAbility {
> **说明:**
> 当获取的是其他应用的Context时:
>
> - 申请`ohos.permission.GET_BUNDLE_INFO_PRIVILEGED`权限,配置方式请参阅[访问控制授权申请指导](../security/accesstoken-guidelines.md#stage模型)。
> - 申请`ohos.permission.GET_BUNDLE_INFO_PRIVILEGED`权限,配置方式请参见[访问控制授权申请](../security/accesstoken-guidelines.md#配置文件权限声明)。
>
> - 接口为系统接口,三方应用不支持调用。
......@@ -199,7 +199,7 @@ export default class EntryAbility extends UIAbility {
> **说明:**
> 当获取的是其他应用的指定Module的Context时:
>
> - 申请`ohos.permission.GET_BUNDLE_INFO_PRIVILEGED`权限,配置方式请参阅[访问控制授权申请指导](../security/accesstoken-guidelines.md#stage模型)。
> - 申请`ohos.permission.GET_BUNDLE_INFO_PRIVILEGED`权限,配置方式请参见[访问控制授权申请](../security/accesstoken-guidelines.md#配置文件权限声明)。
>
> - 接口为系统接口,三方应用不支持调用。
......@@ -303,7 +303,7 @@ export default class EntryAbility extends UIAbility {
每个Ability中都包含了一个Context属性。Ability功能主要是处理生命周期,其余操作Ability的方法(例如startAbility()、connectServiceExtensionAbility()、terminateSelf()等)都是在对应的Context中实现的,同时Context也提供了获取Ability的配置信息、向用户申请授权等能力,如何获取Context请参见[获取UIAbility的上下文信息](uiability-usage.md#获取uiability的上下文信息)
应用需要获取用户的隐私信息或使用系统能力时,例如获取位置信息、访问日历、使用相机拍摄照片或录制视频等,需要向用户申请授权,示意效果如下图所示。具体使用请参见[访问控制授权申请指导](../security/accesstoken-guidelines.md)
应用需要获取用户的隐私信息或使用系统能力时,例如获取位置信息、访问日历、使用相机拍摄照片或录制视频等,需要向用户申请授权,示意效果如下图所示。具体使用请参见[访问控制授权申请](../security/accesstoken-guidelines.md)
**图2** 向用户申请日历访问授权
<img src="figures/application-context-stage.png" alt="application-context-stage" style="zoom:50%;" />
\ No newline at end of file
......@@ -19,7 +19,7 @@ OpenHarmony通过CES(Common Event Service,公共事件服务)为应用程
- 有序公共事件:CES转发公共事件时,按订阅者订阅先后顺序,在接收到前一个订阅者回复后,再转发下一个订阅者。
- 粘性公共事件:能够让订阅者收到在订阅前已经发送的公共事件就是粘性公共事件。普通的公共事件只能在订阅后发送才能收到,而粘性公共事件的特殊性就是可以先发送后订阅。发送粘性事件必须是系统应用或系统服务,且需要申请`ohos.permission.COMMONEVENT_STICKY`权限,配置方式请参[访问控制授权申请指导](../security/accesstoken-guidelines.md#stage模型)
- 粘性公共事件:能够让订阅者收到在订阅前已经发送的公共事件就是粘性公共事件。普通的公共事件只能在订阅后发送才能收到,而粘性公共事件的特殊性就是可以先发送后订阅。发送粘性事件必须是系统应用或系统服务,且需要申请`ohos.permission.COMMONEVENT_STICKY`权限,配置方式请参[访问控制授权申请](../security/accesstoken-guidelines.md#配置文件权限声明)
每个应用都可以按需订阅公共事件,订阅成功,当公共事件发布时,系统会将其发送给对应的应用。这些公共事件可能来自系统、其他应用和应用自身。
......
......@@ -47,7 +47,7 @@
### 开发步骤
1. 申请`ohos.permission.DISTRIBUTED_DATASYNC`权限,配置方式请参[访问控制授权申请指导](../security/accesstoken-guidelines.md#stage模型)
1. 申请`ohos.permission.DISTRIBUTED_DATASYNC`权限,配置方式请参[访问控制授权申请](../security/accesstoken-guidelines.md#配置文件权限声明)
2. 申请数据同步权限,弹框示例代码。
......@@ -129,7 +129,7 @@
### 开发步骤
1. 申请`ohos.permission.DISTRIBUTED_DATASYNC`权限,配置方式请参[访问控制授权申请指导](../security/accesstoken-guidelines.md#stage模型)
1. 申请`ohos.permission.DISTRIBUTED_DATASYNC`权限,配置方式请参[访问控制授权申请](../security/accesstoken-guidelines.md#配置文件权限声明)
2. 申请数据同步权限,弹框示例代码。
......@@ -187,7 +187,7 @@
// ...
// context为调用方UIAbility的AbilityContext
// context为调用方UIAbility的UIAbilityContext
this.context.startAbilityForResult(want).then((data) => {
if (data?.resultCode === RESULT_CODE) {
// 解析目标端UIAbility返回的信息
......@@ -218,7 +218,7 @@
### 开发步骤
1. 申请`ohos.permission.DISTRIBUTED_DATASYNC`权限,配置方式请参[访问控制授权申请指导](../security/accesstoken-guidelines.md#stage模型)
1. 申请`ohos.permission.DISTRIBUTED_DATASYNC`权限,配置方式请参[访问控制授权申请](../security/accesstoken-guidelines.md#配置文件权限声明)
2. 申请数据同步权限,弹框示例代码。
......@@ -327,7 +327,7 @@
### 开发步骤
1. 申请`ohos.permission.DISTRIBUTED_DATASYNC`权限,配置方式请参[访问控制授权申请指导](../security/accesstoken-guidelines.md#stage模型)
1. 申请`ohos.permission.DISTRIBUTED_DATASYNC`权限,配置方式请参[访问控制授权申请](../security/accesstoken-guidelines.md#配置文件权限声明)
2. 申请数据同步权限,弹框示例代码。
......
......@@ -11,7 +11,7 @@
- MissionList:一个从桌面开始启动的任务列表,记录了任务之间的启动关系,上一个任务由下一个任务启动,最底部的任务由桌面启动,这里称之为任务链。
- MissionListManager:系统任务管理模块,内部维护了当前所有的任务链,与最近任务列表保持一致。
**图1** 任务管理示意图
![mission-list-manager](figures/mission-list-manager.png)
......@@ -31,7 +31,7 @@
一个UIAbility实例对应一个单独的任务,因此应用调用startAbility()方法启动一个UIAbility时,就是创建了一个任务。
桌面应用调用[missionManager](../reference/apis/js-apis-application-missionManager.md)的接口管理任务,需要申请`ohos.permission.MANAGE_MISSIONS`权限,配置方式请参[访问控制授权申请指导](../security/accesstoken-guidelines.md#stage模型)
桌面应用调用[missionManager](../reference/apis/js-apis-application-missionManager.md)的接口管理任务,需要申请`ohos.permission.MANAGE_MISSIONS`权限,配置方式请参[访问控制授权申请](../security/accesstoken-guidelines.md#配置文件权限声明)
利用missionManager进行任务管理(监听任务变化、获取任务信息、获取任务快照、清理任务、任务加锁/解锁等),示例代码如下:
......
......@@ -10,7 +10,7 @@
在config.json声明需要的权限,在module下添加"reqPermissions",并写入对应权限。
如申请访问日历权限,需要申请`ohos.permission.READ_CALENDAR`权限,配置方式请参[访问控制授权申请指导](../security/accesstoken-guidelines.md#stage模型)
如申请访问日历权限,需要申请`ohos.permission.READ_CALENDAR`权限,配置方式请参[访问控制授权申请](../security/accesstoken-guidelines.md#配置文件权限声明)
对应config.json文件的示例代码如下所示:
......
# UIAbility组件与UI的数据同步
基于OpenHarmony的应用模型,可以通过以下种方式来实现UIAbility组件与UI之间的数据同步。
基于OpenHarmony的应用模型,可以通过以下种方式来实现UIAbility组件与UI之间的数据同步。
- EventHub:[基类Context](application-context-stage.md)提供了EventHub的能力,通过发布订阅方式来实现。事件需要先订阅后发布,订阅者收到消息后进行处理。
1. EventHub:基于发布订阅模式来实现,事件需要先订阅后发布,订阅者收到消息后进行处理。
2. globalThis:ArkTS引擎实例内部的一个全局对象,在ArkTS引擎实例内部都能访问。
- globalThis:ArkTS引擎实例内部的一个全局对象,在ArkTS引擎实例内部都能访问。
- LocalStorage/AppStorage:参见[页面级变量的状态管理](../quick-start/arkts-state-mgmt-application-level.md)
## 使用EventHub进行数据通信
EventHub提供了UIAbility组件/ExtensionAbility组件级别的事件机制,以UIAbility组件/ExtensionAbility组件为中心提供了订阅、取消订阅和触发事件的数据通信能力。接口说明请参见[EventHub](../reference/apis/js-apis-inner-application-eventHub.md)
[EventHub](../reference/apis/js-apis-inner-application-eventHub.md)提供了UIAbility组件/ExtensionAbility组件级别的事件机制,以UIAbility组件/ExtensionAbility组件为中心提供了订阅、取消订阅和触发事件的数据通信能力
在使用EventHub之前,首先需要获取EventHub对象。[基类Context](application-context-stage.md)提供了EventHub对象,本章节以使用EventHub实现UIAbility与UI之间的数据通信为例进行说明。
[基类Context](application-context-stage.md)提供了EventHub对象,在使用EventHub之前,首先需要获取EventHub对象。本章节以使用EventHub实现UIAbility与UI之间的数据通信为例进行说明。
1. 在UIAbility中调用eventHub.on()方法注册一个自定义事件“event1”,eventHub.on()有如下两种调用方式,使用其中一种即可。
1. 在UIAbility中调用[eventHub.on()](../reference/apis/js-apis-inner-application-eventHub.md#eventhubon)方法注册一个自定义事件“event1”,[eventHub.on()](../reference/apis/js-apis-inner-application-eventHub.md#eventhubon)有如下两种调用方式,使用其中一种即可。
```ts
import UIAbility from '@ohos.app.ability.UIAbility';
......@@ -41,7 +41,7 @@ EventHub提供了UIAbility组件/ExtensionAbility组件级别的事件机制,
}
```
2. 在UI界面中通过eventHub.emit()方法触发该事件,在触发事件的同时,根据需要传入参数信息。
2. 在UI界面中通过[eventHub.emit()](../reference/apis/js-apis-inner-application-eventHub.md#eventhubemit)方法触发该事件,在触发事件的同时,根据需要传入参数信息。
```ts
import common from '@ohos.app.ability.common';
......@@ -78,7 +78,7 @@ EventHub提供了UIAbility组件/ExtensionAbility组件级别的事件机制,
[2,'test']
```
4. 在自定义事件“event1”使用完成后,可以根据需要调用eventHub.off()方法取消该事件的订阅。
4. 在自定义事件“event1”使用完成后,可以根据需要调用[eventHub.off()](../reference/apis/js-apis-inner-application-eventHub.md#eventhuboff)方法取消该事件的订阅。
```ts
// context为UIAbility实例的AbilityContext
......
......@@ -38,7 +38,7 @@ UIAbility是系统调度的最小单元。在设备内的功能模块之间跳
info: '来自EntryAbility Index页面',
},
}
// context为调用方UIAbility的AbilityContext
// context为调用方UIAbility的UIAbilityContext
this.context.startAbility(wantInfo).then(() => {
// ...
}).catch((err) => {
......@@ -88,7 +88,7 @@ UIAbility是系统调度的最小单元。在设备内的功能模块之间跳
info: '来自EntryAbility Index页面',
},
}
// context为调用方UIAbility的AbilityContext
// context为调用方UIAbility的UIAbilityContext
this.context.startAbilityForResult(wantInfo).then((data) => {
// ...
}).catch((err) => {
......@@ -124,7 +124,7 @@ UIAbility是系统调度的最小单元。在设备内的功能模块之间跳
// ...
// context为调用方UIAbility的AbilityContext
// context为调用方UIAbility的UIAbilityContext
this.context.startAbilityForResult(want).then((data) => {
if (data?.resultCode === RESULT_CODE) {
// 解析被调用方UIAbility返回的信息
......@@ -187,7 +187,7 @@ UIAbility是系统调度的最小单元。在设备内的功能模块之间跳
entities: ['entity.system.default'],
}
// context为调用方UIAbility的AbilityContext
// context为调用方UIAbility的UIAbilityContext
this.context.startAbility(wantInfo).then(() => {
// ...
}).catch((err) => {
......@@ -250,7 +250,7 @@ UIAbility是系统调度的最小单元。在设备内的功能模块之间跳
entities: ['entity.system.default'],
}
// context为调用方UIAbility的AbilityContext
// context为调用方UIAbility的UIAbilityContext
this.context.startAbilityForResult(wantInfo).then((data) => {
// ...
}).catch((err) => {
......@@ -288,7 +288,7 @@ UIAbility是系统调度的最小单元。在设备内的功能模块之间跳
// Want参数信息
};
// context为调用方UIAbility的AbilityContext
// context为调用方UIAbility的UIAbilityContext
this.context.startAbilityForResult(want).then((data) => {
if (data?.resultCode === RESULT_CODE) {
// 解析被调用方UIAbility返回的信息
......@@ -321,7 +321,7 @@ let wantInfo = {
router: 'funcA',
},
}
// context为调用方UIAbility的AbilityContext
// context为调用方UIAbility的UIAbilityContext
this.context.startAbility(wantInfo).then(() => {
// ...
}).catch((err) => {
......
......@@ -114,7 +114,7 @@ specified启动模式为指定实例模式,针对一些特殊场景使用(
instanceKey: getInstance(),
},
}
// context为调用方UIAbility的AbilityContext
// context为调用方UIAbility的UIAbilityContext
this.context.startAbility(want).then(() => {
// ...
}).catch((err) => {
......
......@@ -42,7 +42,7 @@ cameraInput = await this.cameraManager.createCameraInput(cameraId)
适用于:OpenHarmony 3.2.5.6版本,API9 Stage模型
1. **通过传入的uri创建图片源实例ImageSource对象。**
```
let path = this.context.getApplicationContext().fileDirs + "test.jpg";
const imageSourceApi = image.createImageSource(path);
......@@ -52,7 +52,7 @@ cameraInput = await this.cameraManager.createCameraInput(cameraId)
- 设置desiredSize支持按尺寸缩放,如果设置为全0,则不进行缩放。
- 设置desiredRegion支持按矩形区域裁剪,如果设置为全0,则不进行裁剪。
- 设置rotateDegrees支持旋转角度,以图像中心点顺时针旋转。
```
const decodingOptions = {
desiredSize: {
......@@ -85,7 +85,7 @@ cameraInput = await this.cameraManager.createCameraInput(cameraId)
1. 在module.json5配置文件中配置媒体读写权限ohos.permission.READ_MEDIA和ohos.permission.WRITE_MEDIA。
示例:
```
{
"module" : {
......@@ -104,13 +104,13 @@ cameraInput = await this.cameraManager.createCameraInput(cameraId)
```
2. 这两个权限的授权方式均为user_grant,因此需要调用requestPermissionsFromUser接口,以动态弹窗的方式向用户申请授权。
```
import abilityAccessCtrl from '@ohos.abilityAccessCtrl.d.ts';
let permissions: Array<string> = ['ohos.permission.READ_MEDIA','ohos.permission.WRITE_MEDIA']
let atManager = abilityAccessCtrl.createAtManager();
// context为调用方UIAbility的AbilityContext
// context为调用方UIAbility的UIAbilityContext
atManager.requestPermissionsFromUser(context, permissions).then((data) => {
console.log("Succeed to request permission from user with data: " + JSON.stringify(data))
}).catch((error) => {
......
......@@ -21,7 +21,7 @@ AudioCapturer提供了用于获取原始音频文件的方法。开发者可以
## 约束与限制
开发者在进行音频数据采集功能开发前,需要先对所开发的应用配置麦克风权限(ohos.permission.MICROPHONE),权限配置相关内容可参考:[访问控制授权申请指导](../security/accesstoken-guidelines.md)
开发者在进行音频数据采集功能开发前,需要先对所开发的应用配置麦克风权限(ohos.permission.MICROPHONE),配置方式请参见[访问控制授权申请](../security/accesstoken-guidelines.md#配置文件权限声明)
## 开发指导
......@@ -178,16 +178,16 @@ AudioCapturer提供了用于获取原始音频文件的方法。开发者可以
// 获取采集器信息
let audioCapturerInfo : audio.AuduioCapturerInfo = await audioCapturer.getCapturerInfo();
// 获取音频流信息
let audioStreamInfo : audio.AudioStreamInfo = await audioCapturer.getStreamInfo();
// 获取音频流ID
let audioStreamId : number = await audioCapturer.getAudioStreamId();
// 获取纳秒形式的Unix时间戳
let audioTime : number = await audioCapturer.getAudioTime();
// 获取合理的最小缓冲区大小
let bufferSize : number = await audioCapturer.getBuffersize();
```
......
......@@ -16,7 +16,7 @@ AudioVolumeManager提供了音量管理的方法。开发者可以通过本指
## 约束与限制
开发者在进行麦克风管理开发前,需要先对所开发的应用配置麦克风权限(ohos.permission.MICROPHONE),如果要设置麦克风状态,则需要配置音频管理配置权限(ohos.permission.MANAGE_AUDIO_CONFIG),需注意该权限为系统级别权限。权限配置相关内容可参考:[访问控制授权申请指导](../security/accesstoken-guidelines.md)
开发者在进行麦克风管理开发前,需要先对所开发的应用配置麦克风权限(ohos.permission.MICROPHONE),如果要设置麦克风状态,则需要配置音频管理配置权限(ohos.permission.MANAGE_AUDIO_CONFIG),需注意该权限为系统级别权限。配置方式请参见[访问控制授权申请](../security/accesstoken-guidelines.md#配置文件权限声明)
## 开发指导
......@@ -89,27 +89,27 @@ AudioVolumeManager提供了音量管理的方法。开发者可以通过本指
var audioVolumeGroupManager = await audio.getAudioManager().getVolumeManager().getVolumeGroupManager(groupid);
console.info('audioVolumeGroupManager create success.');
}
async on() { //监听麦克风状态变化
await loadVolumeGroupManager();
await audioVolumeGroupManager.audioVolumeGroupManager.on('micStateChange', (micStateChange) => {
console.info(`Current microphone status is: ${micStateChange.mute} `);
});
}
async isMicrophoneMute() { //查询麦克风是否静音
await audioVolumeGroupManager.audioVolumeGroupManager.isMicrophoneMute().then((value) => {
console.info(`isMicrophoneMute is: ${value}.`);
});
}
async setMicrophoneMuteTrue() { //设置麦克风静音
await loadVolumeGroupManager();
await audioVolumeGroupManager.audioVolumeGroupManager.setMicrophoneMute(true).then(() => {
console.info('setMicrophoneMute to mute.');
});
}
async setMicrophoneMuteFalse() { //取消麦克风静音
await loadVolumeGroupManager();
await audioVolumeGroupManager.audioVolumeGroupManager.setMicrophoneMute(false).then(() => {
......@@ -123,5 +123,5 @@ AudioVolumeManager提供了音量管理的方法。开发者可以通过本指
await isMicrophoneMute();
await setMicrophoneMuteFalse();
}
```
```
......@@ -35,7 +35,7 @@
## 开发步骤
1. 申请`ohos.permission.NOTIFICATION_CONTROLLER`权限,配置方式请参[访问控制授权申请指导](../security/accesstoken-guidelines.md)
1. 申请`ohos.permission.NOTIFICATION_CONTROLLER`权限,配置方式请参[访问控制授权申请](../security/accesstoken-guidelines.md#配置文件权限声明)
2. 导入通知订阅模块。
......
......@@ -15,13 +15,15 @@
应用需要在工程配置文件中,对需要的权限逐个声明,未在配置文件中声明的权限,应用将无法获得授权。OpenHarmony提供了两种应用模型,分别为FA模型和Stage模型,更多信息可以参考[应用模型解读](../application-models/application-model-description.md)。不同的应用模型的应用包结构不同,所使用的配置文件不同。
> **说明**:应用默认的APL等级为`normal`,当应用需要申请`system_basic`和`system_core`等级时,除了在配置文件中进行权限声明之外,还需要通过[ACL方式](#acl方式声明)进行声明使用。
配置文件标签说明如下表所示。
| 标签 | 是否必填 | 说明 |
| --------- | -------- | ------------------------------------------------------------ |
| name | 是 | 权限名称。 |
| reason | 否 | 描述申请权限的原因。<br />> 说明:当申请的权限为user_grant权限时,此字段必填。 |
| usedScene | 否 | 描述权限使用的场景和时机。<br />> 说明:当申请的权限为user_grant权限时,此字段必填。 |
| reason | 否 | 描述申请权限的原因。<br />> **说明**:当申请的权限为user_grant权限时,此字段必填。 |
| usedScene | 否 | 描述权限使用的场景和时机。<br />> **说明**:当申请的权限为user_grant权限时,此字段必填。 |
| abilities | 否 | 标识需要使用到该权限的Ability,标签为数组形式。<br/>**适用模型**:Stage模型 |
| ability | 否 | 标识需要使用到该权限的Ability,标签为数组形式。<br/>**适用模型**:FA模型 |
| when | 否 | 标识权限使用的时机,值为`inuse/always`<br />- inuse:表示为仅允许前台使用。<br />- always:表示前后台都可使用。 |
......@@ -96,7 +98,7 @@
## ACL方式声明
应用在申请`system_basic`等级权限时,高于应用默认的`normal`等级。当应用需要申请权限项的等级高于应用默认的等级时,需要通过ACL方式进行声明使用。
应用在申请`system_basic``system_core`等级权限时,高于应用默认的`normal`等级。当应用需要申请权限项的等级高于应用默认的等级时,需要通过ACL方式进行声明使用。
例如应用在申请访问用户公共目录下音乐类型的文件,需要申请` ohos.permission.WRITE_AUDIO`权限,该权限为`system_basic`等级;以及应用在申请截取屏幕图像功能,该权限为`system_core`等级,需要申请` ohos.permission.CAPTURE_SCREEN`权限。此时需要将相关权限项配置到[HarmonyAppProvision配置文件](app-provision-structure.md)`acl`字段中。
......@@ -123,7 +125,7 @@
以允许应用读取日历信息为例进行说明。
1. 申请`ohos.permission.READ_CALENDAR`权限,配置方式请参见[访问控制授权申请](#stage模型)
1. 申请`ohos.permission.READ_CALENDAR`权限,配置方式请参见[访问控制授权申请](#配置文件权限声明)
2. 可以在UIAbility的onWindowStageCreate()回调中调用[requestPermissionsFromUser()](../reference/apis/js-apis-abilityAccessCtrl.md#requestpermissionsfromuser9)接口动态申请权限,也可以根据业务需要在UI界面中向用户申请授权。根据[requestPermissionsFromUser()](../reference/apis/js-apis-abilityAccessCtrl.md#requestpermissionsfromuser9)接口返回值判断是否已获取目标权限,如果当前已经获取权限,则可以继续正常访问目标接口。
......@@ -221,7 +223,7 @@ onWindowStageCreate() {
- `app_signature`字段配置为应用的指纹信息。指纹信息的配置参见[应用特权配置指南](../../device-dev/subsystems/subsys-app-privilege-config-guide.md#install_list_capabilityjson中配置)
- `permissions`字段中`name`配置为需要预授权的`user_grant`类型的权限名;`permissions`字段中`userCancellable`表示为用户是否能够取消该预授权,配置为true,表示支持用户取消授权,为false则表示不支持用户取消授权。
> 说明:当前仅支持预置应用配置该文件。
> **说明**:当前仅支持预置应用配置该文件。
```json
[
......
......@@ -19,7 +19,7 @@
## 开发步骤
1. 申请`ohos.permission.PUBLISH_AGENT_REMINDER`权限,配置方式请参[访问控制授权申请指导](../security/accesstoken-guidelines.md#stage模型)
1. 申请`ohos.permission.PUBLISH_AGENT_REMINDER`权限,配置方式请参[访问控制授权申请](../security/accesstoken-guidelines.md#配置文件权限声明)
2. [使能通知开关](../notification/notification-enable.md),获得用户授权后,才能使用代理提醒功能。
......@@ -164,7 +164,7 @@
```js
let reminderId = 0; // reminderId的值从发布提醒代理成功之后的回调中获得
try {
reminderAgentManager.cancelReminder(reminderId).then(() => {
console.log("cancelReminder promise");
......
......@@ -20,7 +20,7 @@ OpenHarmony系统开发人员在新增或修改代码之后,希望可以快速
## 环境准备
开发自测试框架依赖于python运行环境,python版本为3.7.5及以上版本,在使用测试框架之前可参以下方式进行配置。
开发自测试框架依赖于python运行环境,python版本为3.7.5及以上版本,在使用测试框架之前可参以下方式进行配置。
源码获取可[参考](https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/get-code/sourcecode-acquire.md)
......
......@@ -3,7 +3,7 @@ OpenHarmony为开发者提供了一套全面的自测试框架,开发者可根
本文从基础环境构建,用例开发,编译以及执行等方面介绍OpenHarmony测试框架如何运行和使用。
## 基础环境构建
测试框架依赖于python运行环境,在使用测试框架之前可参以下方式进行配置。
测试框架依赖于python运行环境,在使用测试框架之前可参以下方式进行配置。
- [环境配置](../device-dev/device-test/xdevice.md)
- [源码获取](../device-dev/get-code/sourcecode-acquire.md)
......@@ -119,7 +119,7 @@ subsystem # 子系统
{
// step 1:调用函数获取结果
int actual = Sub(4,0);
// Step 2:使用断言比较预期与实际结果
EXPECT_EQ(4, actual);
}
......@@ -132,7 +132,7 @@ subsystem # 子系统
2. 引用测试框架头文件和命名空间
```
#include <gtest/gtest.h>
using namespace testing::ext;
```
3. 添加被测试类的头文件
......@@ -148,22 +148,22 @@ subsystem # 子系统
void SetUp();
void TearDown();
};
void CalculatorSubTest::SetUpTestCase(void)
{
// input testsuit setup step,setup invoked before all testcases
}
void CalculatorSubTest::TearDownTestCase(void)
{
// input testsuit teardown step,teardown invoked after all testcases
}
void CalculatorSubTest::SetUp(void)
{
// input testcase setup step,setup invoked before each testcases
}
void CalculatorSubTest::TearDown(void)
{
// input testcase teardown step,teardown invoked after each testcases
......@@ -183,7 +183,7 @@ subsystem # 子系统
{
//step 1:调用函数获取结果
int actual = Sub(4,0);
//Step 2:使用断言比较预期与实际结果
EXPECT_EQ(4, actual);
}
......@@ -262,7 +262,7 @@ subsystem # 子系统
it("appInfoTest001", 0, function () {
//step 1:调用函数获取结果
var info = app.getInfo()
//Step 2:使用断言比较预期与实际结果
expect(info != null).assertEqual(true)
})
......@@ -276,7 +276,7 @@ subsystem # 子系统
2. 导入被测api和jsunit测试库
```
import app from '@system.app'
import {describe, beforeAll, beforeEach, afterEach, afterAll, it, expect} from 'deccjsunit/index'
```
3. 定义测试套(测试类)
......@@ -313,7 +313,7 @@ subsystem # 子系统
it("appInfoTest001", 0, function () {
//step 1:调用函数获取结果
var info = app.getInfo()
//Step 2:使用断言比较预期与实际结果
expect(info != null).assertEqual(true)
})
......@@ -415,7 +415,7 @@ subsystem # 子系统
> - ohos_securitytest:安全测试
> - ohos_reliabilitytest:可靠性测试
> - ohos_distributedtest:分布式测试
7. 对目标测试用例文件进行条件分组
```
......@@ -425,7 +425,7 @@ subsystem # 子系统
}
```
> **说明:** 进行条件分组的目的在于执行用例时可以选择性的执行某一种特定类型的用例。
- **JavaScript用例编译配置示例**
```
......@@ -811,6 +811,5 @@ reports/latest
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册