[鸿蒙征文]Previewer 预览器数据模拟
前言
在我看来,鸿蒙应用开发最大的一个优势在于它的预览器非常方便直观,可以实时调试界面布局,并迅速生效。然而很多时候,页面上的内容依赖数据源。预览器能力有限,而且出于性能考虑,在预览的时候使用真实数据是没必要的。Dev Eco Studio 针对这种开发场景提供了一个预览数据模拟的功能。
开发环境:
Windows 11
DevEco Studio 6.0.0 Beta1
Build Version: 6.0.0.418SP, built on June 24, 2025
运行环境:
模拟器
HarmonyOS 6.0.0(20) Beta1
参考文档:
添加依赖
在工程下方的终端窗口中输入命令
或者在oh-package.json5
中手动添加依赖
UI 组件上的 Mock
Hamock 提供了@MockSetup
用于修饰 Mock 方法,仅支持声明式范式的组件。当开发者预览该组件时,预览运行时将在组件初始化时执行被 @MockSetup 修饰的方法。因此,开发者可以在这个被修饰的方法内重定义组件的方法或重赋值组件的属性,其将在预览时生效。
@MockSetup
修饰的方法仅在预览场景会自动触发,并先于组件的 aboutToAppear 执行。
如果写了多个以@MockSetup
修饰的方法,只会执行第一个声明的方法,之后声明的方法都被忽略。
创建一个界面
Index
模拟器和预览器的截图对比,现在为止两边是一样的。


在 ArkTS 页面代码中引入 Hamock。
在 Index 中定义一个方法
mockTitle()
,并用 @MockSetup 修饰该方法,这个方法名可以随意取,并且不需要传入参数。
现在看下效果,立竿见影。预览窗的 Text 控件直接显示了"title mock"。说明预览窗执行了mockTitle()
方法,但运行工程的的话,没有执行该方法。


如果在
aboutToAppear()
中如果对 title 属性有修改,那么运行和预览都会统一变成aboutToAppear()
中修改的值。因为预览@MockSetup
执行完之后会执行aboutToAppear()
,运行也会直接执行aboutToAppear()
。


除了直接改属性值,还能 mock 方法返回值。创建一个新方法
setup()
,返回字符串"setup"。
在aboutToAppear()
中用 setup()的返回值设置 title 的值
在@MockSetup
中按如下代码编写。this.title = "title mock"
继续保留,可以观察出来代码的执行顺序。然后创建一个MockKit
实例,调用mocker.mockFunc()
来绑定需要 mock 的方法。最后调用when()
来配置 mock 的入参和出参。这一步我们先学习如何 mock 函数返回值。在afterReturn()
中传入 mock 的返回值


现在预览器的执行顺序是,
@MockSetup
中修改了 title 值,并 mock 了setup()
函数的返回值。之后代码走到aboutToAppear()
,title 又被修改。此处如果是运行的状态,
setup()
返回字符串"setup",如果是预览器,则setup()
的返回值被 mock 成了"setup mock"。如果
setup()
接受参数,则配置 mock 的时候需要指定入参的内容,只有入参匹配上,mock 才会生效。修改
setup()
和aboutToAppear()
方法
根据修改后的setup()
入参,@MockSetup
应该这样修改
此时 mock 生效

如果随意配置入参,或者不填写入参,会无法渲染界面。
版权声明: 本文为 InfoQ 作者【大展红图】的原创文章。
原文链接:【http://xie.infoq.cn/article/d71a1bfb73a04299279319480】。文章转载请联系作者。
评论