跳到主要内容

Local Test

当前不支持测试C/C++方法及系统API。

创建Local Test测试用例

  1. 在工程目录下打开待测试模块(支持HAP、HAR、HSP模块)下的ets文件,将光标置于代码中任意位置,单击右键 > Show Context Actions > Create Local Test或快捷键Alt+Enter********(macOS为Option+Enter) > Create Local Test创建测试类。

  2. 在弹出的Create Local Test窗口,输入或选择如下参数。

    • Testing library:测试类型,默认为DECC-ArkTSUnit。
    • ArkTS name:创建的测试文件名称,测试文件中包含了测试用例。测试文件名称要求在工程目录范围内具有唯一性,仅支持字母、数字、下划线(_)和点(.)。
    • Destination package:测试文件存放的位置,建议存放在待测试模块的test目录下。

  3. DevEco Studio在test目录下自动生成对应的测试类。在测试类中,DevEco Studio会生成对应方法的用例模板,具体测试代码需要开发者根据业务逻辑进行开发,具体请参考单元测试框架

    您也可以手动在test文件夹下创建测试用例,手动创建后,需要在List.test.ets文件中添加创建的用例类。

运行Local Test测试用例

运行模式

可以采用运行工程目录(test)、测试文件(如Index.test.ets)、测试套件(describe)、测试方法(it)的方式来执行Local Test,各级别测试执行入口如下。

目录级文件级
套件级方法级

以文件级别为例,在工程目录中,选中文件,单击右键 > Run'测试文件名称',执行测试。

也可以通过如下方式,执行Local Test:

  • 在工具栏主菜单单击Run > Run'测试名称'

  • 在DevEco Studio的右上角,选择一项测试任务的配置,然后单击右侧的按钮,执行Local Test。

执行完测试任务后,查看测试结果。

调试模式

调试模式相比运行模式增加了断点管理功能。在断点命中时,可以选择单步执行、步入步出、进入下个断点等方式进行调试,另外可以使用线程堆栈可视化、变量和表达式可视化功能,快速定位问题。

以文件级别为例,在添加断点之后,在工程目录中,选中文件,单击右键 > Debug'测试文件名称',以调试模式执行测试任务。

在断点命中时,下方将出现Debug窗口。开发者可在该窗口中进行断点管理与基础调试能力的可视化操作,在断点命中时可查看当前线程的变量和堆栈信息。

断点命中时,在代码编辑器窗口单击右键,在弹出的菜单中将出现调试模式特有功能,如计算表达式、添加变量监视等。

在跳出所有断点后,测试结束,与运行模式相同,在测试窗口查看测试结果。

覆盖率统计模式

在LocalTest运行的基础上支持代码覆盖率统计,当前仅支持ArkTS工程。

开发者可以自定义需要参与覆盖率测试的文件,具体配置方法请参考配置覆盖率过滤文件

如前所述,覆盖率统计模式也有多级别入口,以文件级别为例,有两种方式启动测试:

  • 方式一:在工程目录中,选中文件,单击右键 > Run '测试文件名称' with Coverage,以覆盖率统计模式执行测试任务。

  • 方式二:在DevEco Studio的右上角,选择测试任务,然后单击右侧的按钮,执行测试。

启动测试后,进行编译构建,底部将出现Cover窗口,构建结束后自动拉起Cover窗口,测试任务结束后,窗口中会打印测试报告的路径。

点击链接可打开报告,查看代码覆盖率详情,关于覆盖率的计算方式请参考查看覆盖率报告

在Cover窗口中,单击rerun按钮可以按照之前的设置,重新执行覆盖率用例。

(可选)自定义测试用例运行任务

默认情况下,测试用例可直接运行。如果需要自定义测试用例运行任务,可通过如下方法进行设置。

  1. 在工具栏主菜单单击Run>Edit Configurations,进入Run/Debug Configurations界面。

  2. Run/Debug Configurations界面,单击****+按钮,在弹出的下拉菜单中,单击Local Test****。

  3. 根据实际情况,配置Local Test的运行参数。 然后单击OK,完成配置。

使用命令行执行Local Test

通过命令行方式执行Local Test,在工程根目录下执行命令:

hvigorw test -p module={moduleName} -p coverage={true | false} -p scope={suiteName}#{methodName}
  • module:执行测试的模块。缺省默认是执行所有模块的用例。
  • coverage:是否生成覆盖率报告,缺省默认是true,在<module-path>/.test/default/outputs/test/reports路径下生成两份报告,一份是html格式(index.html),一份是json格式(coverageReport.json),具体参考查看覆盖率报告
  • scope:格式为{suiteName}#{methodName}或{suiteName},分别表示测试用例级别或测试套件级别的测试,缺省默认是执行当前模块的所有用例。

  • 多个module和scope之间用英文逗号隔开。
  • 暂不支持在Linux上执行该命令。

测试结果文件:<module-path>/.test/default/intermediates/test/coverage_data/test_result.txt