HarmonyOS 鸿蒙Next中单元测试的使用问题请求解答

HarmonyOS 鸿蒙Next中单元测试的使用问题请求解答

通过UnitTest创建的单元测试类,遇到以下问题:

  1. 无法获取Context,进而无法获取沙盒的文件路径filesDir,缓存路径cacheDir
  2. 无法获取查询数据库的内容,比如:let user = await UserUtils.getUserFromDB()
  3. 无法调起系统一些类,比如:calendarMgr?.getCalendar()。调用时会返回错误,错误信息字段都是空的
  4. 测试的方法里面调用了接口,如何对接口编写单元测试的业务代码,可以举例子说明就更好了。
4 回复

您好,为了更快速解决您的问题,并且吸引更多用户一同参与您问题的解答与讨论,建议您补全如下信息:

补全复现代码(如最小复现demo、脚本),让参与用户更快速复现您的问题;

更多提问技巧,请参考:《提问小技巧:让解答更高效》

更多关于HarmonyOS 鸿蒙Next中单元测试的使用问题请求解答的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


无法获取Context的问题我碰到过,getContext(this)返回的filesDir等目录为空, 我的办法是

EntryAbility::onWindowStageCreate(windowStage: window.WindowStage): 函数中通过
PathDir.pathDir = this.context.filesDir; //通过自定义一个类,用类静态成员变量保存起来,在要用这个沙盒目录的地方,读取这个静态成员变量,就可以访问这个沙盒目录下的文件了

鸿蒙Next单元测试使用ArkTS框架,主要依赖@ohos.test模块。测试文件需以.test.ets后缀命名,放置在模块的test目录下。测试用例使用describe和it语法结构,断言方法包括assertEqual()等。测试运行需通过DevEco Studio的测试工具执行,或使用命令行工具。测试覆盖率报告可在build/logs/目录查看。Mock能力通过@ohos.hitrace实现系统接口模拟。

针对HarmonyOS Next单元测试的问题,以下是解决方案:

  1. Context获取问题:
  • 使用TestRunner提供的getContext()方法获取测试上下文
  • 示例代码:
const context = TestRunner.getContext();
const filesDir = context.filesDir;
  1. 数据库测试问题:
  • 使用@ohos.data.relationalStore模拟数据库环境
  • 示例代码:
import { RdbStore } from '@ohos.data.relationalStore';

beforeEach(async () => {
  const config = { name: "test.db" };
  await RdbStore.getTestInstance(context, config);
});
  1. 系统服务调用问题:
  • 使用@ohos.mock模块进行模拟
  • 示例代码:
import { mock } from '@ohos.mock';

mock('@system.calendar', {
  getCalendar: () => { return mockData; }
});
  1. 接口测试方案:
  • 使用@ohos.http的模拟功能
  • 示例代码:
import { http } from '@ohos.net.http';

http.mockResponse({
  statusCode: 200,
  data: { userId: 123 }
});

// 测试代码
const res = await fetchUser();
expect(res.userId).toBe(123);

注意:单元测试应聚焦于业务逻辑测试,对于系统服务建议使用mock方式替代真实调用。

回到顶部