您现在的位置是:亿华云 > 数据库

Openharmony 测试用例指导大全

亿华云2025-10-02 14:21:26【数据库】3人已围观

简介想了解更多内容,请访问:和华为官方合作共建的鸿蒙技术社区https://harmonyos.51cto.com该文档演示:编写一个动态库libmoduleb_lib.z.so , 然后编写一个测试可执

想了解更多内容,试用请访问:

和华为官方合作共建的试用鸿蒙技术社区

https://harmonyos.51cto.com

该文档演示:编写一个动态库libmoduleb_lib.z.so , 然后编写一个测试可执行文件ModuleBTest验证动态库接口的正确性。

代码目录结构

partB/module编译的试用是动态库,在子系统sub_example中。试用

partB的试用目录结构为//test/example/partB

test目录结构

单元测试文件添加

子系统配置添加

子系统配置文件:

code-v3.0-LTS/OpenHarmony/build/subsystem_config.json

配置文件添加的内容如下:

... , "sub_example": {    "project": "hmf/test",   "path": "test/example",   "name": "sub_example",   "dir": "test" } 

在Hi3516DV300.json中添加partB的配置

Hi3516DV300.json的位置:

productdefine/common/products/Hi3516DV300.json

添加的源码库内容如下:

{    "product_name": "Hi3516DV300",   "product_company": "hisilicon",   "product_device": "hi3516dv300",   "version": "2.0",   "type": "standard",   "product_build_path": "device/hisilicon/build",   "parts":{      ...     "sub_example:partB":{ }   } } 

example/partB/module/include/moduleB.h内容如下:

#ifndef MODULE_B_H #define MODULE_B_H int Sub(int a, int b);  int Add(int a, int b); #endif //MODULE_B_H 

example/partB/module/include/moduleB.c内容如下:

#include "moduleB.h" #include <stdio.h> int Sub(int a, int b) {      return a - b; } int Add(int a, int b) {      return a + b; } 

example/partB/module/BUILD.gn内容如下:

import("//build/ohos.gni") config("moduleb_lib_config") {    include_dirs = [ "include" ] } ohos_shared_library("moduleb_lib") {    sources = [     "//test/example/partB/module/include/moduleB.h",     "//test/example/partB/module/src/moduleB.c"   ]   public_configs = [ ":moduleb_lib_config" ]   part_name = "partB"   subsystem_name = "sub_example" } 

example/partB/module/test/unittest/module_test/moduleb_test.cpp内容如下:

#include <gtest/gtest.h> #include <cstdio> extern "C" {  #include "moduleB.h" } using namespace testing::ext; // 继承googletext的Test类 class ModuleBTest : public testing::Test {  public:     static void SetUpTestCase();     static void TearDownTestCase();     void SetUp();     void TearDown(); }; void ModuleBTest::SetUpTestCase() { } void ModuleBTest::TearDownTestCase() { } void ModuleBTest::SetUp() {      /**      * @tc.setup: reset perfStat      */     printf("ModuleBTest::SetUp\n"); } void ModuleBTest::TearDown() {      printf("ModuleBTest::TearDown\n"); } /**  * @tc.name: ModuleBTest001  * @tc.desc: Test bind start time and end  * @tc.type: FUNC  * @tc.require: AR000CUF6O  */ HWTEST_F(ModuleBTest, ModuleBTest001, TestSize.Level0) {      // step 1:调用函数获取结果     int actual = Sub(4, 1);     // Step 2:使用断言比较预期与实际结果     EXPECT_EQ(4, actual); } /**  * @tc.name: ModuleBTest002  * @tc.desc: invalid end time test  * @tc.type: FUNC  * @tc.require: AR000CUF6O  */ HWTEST_F(ModuleBTest, ModuleBTest002, TestSize.Level0) {      // 判断Add函数调用的结果是不是期望的12     EXPECT_EQ(12, Add(5, 7));  } 

example/partB/module/test/BUILD.gn内容如下:

import("//build/ohos.gni") import("//build/test.gni") module_output_path = "sub_example/partB" ohos_unittest("ModuleBTest") {    module_out_path = module_output_path   include_dirs = [     "//test/example/partB/module/include"    ]   cflags = [     "-Wall",     "-Werror",   ]   sources = [     "unittest/module_test/moduleb_test.cpp"   ]   deps = [     "//third_party/googletest:gtest_main",   ]   external_deps = [ "partB:moduleb_lib", ]   part_name = "partB" } group("unittest") {    testonly = true   deps = [ ":ModuleBTest" ] } 

example/ohos.build内容如下:

注意:“test_list”,为单元测试添加,试用把ModuleBTest添加到编译系统中去:

{      "subsystem": "sub_example",试用     "parts": {          "partB": {              "module_list": [                 "//test/example/partB/module:moduleb_lib"             ],             "inner_kits": [                 {                      "type": "so",                     "name": "//test/example/partB/module:moduleb_lib",                     "header": {                          "header_files": [                             "moduleB.h"                         ],                         "header_base": "//test/example/partB/module/include"                     }                 }             ],             "system_kits": [],             "test_list": [                 "//test/example/partB/module/test:unittest"             ]         }     } } 

编译:

重编编译moduleb_lib命令如下:

./build.sh --product-name Hi3516DV300 --ccache --build-target moduleb_lib

编译结果在:out\ohos-arm-release\sub_example\partB

编译ModuleBTest命令如下:

./build.sh --product-name Hi3516DV300 --ccache --build-target ModuleBTest

编译结果在:out\ohos-arm-release\tests\unittest\sub_example\partB

测试运行

参考文档:https://gitee.com/openharmony/test_developertest

这个可以参考编写单元测试用例,按照官网文档运行测试用例失败,试用如下图所示:

编译成功

编译成功后,试用可以把编译好的试用***Test用hdc_std.exe发送到Hi3516DV300开发板中去运行,源码下载在串口终端上输出测试用例的试用测试结果。

修改文件权限,试用重新替换文件:

mount -o remount,试用rw / 

libmoduleb_lib.z.so 放入开发板/system/lib/的目录下:

hdc_std.exe file send Z:\out\ohos-arm-release\sub_example\partB\libmoduleb_lib.z.so /system/lib 

ModuleBTest 放入开发板/data/test目录下。 /data/test是试用本人在开发板上自建的目录。

hdc_std.exe file send Z:\out\ohos-arm-release\tests\unittest\sub_example\partB\ModuleBTest /data/test 

修改成可执行权后:

chmod 0711 /data/test/ModuleBTest 

即可运行单元测试用例:

/data/test/ModuleBTest 

如图所示:61行测试结果与预期不符合。试用

想了解更多内容,请访问:

和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

亿华云计算

很赞哦!(3873)