#星光计划2.0#Openharmony单元测试1: 测试用例指导大全

亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述#星光计划2.0#Openharmony单元测试1: 测试用例指导大全相关的知识,希望能为你提供帮助。
【本文正在参与51CTO HarmonyOS技术社区创作者激励计划-星光计划2.0】
该文档演示:编写一个动态库libmoduleb_lib.z.so , 然后编写一个测试可执行文件ModuleBTest验证动态库接口的正确性。
代码目录结构partB/module编译的是动态库,在子系统sub_example中。
partB的目录结构为//test/example/partB

#星光计划2.0#Openharmony单元测试1: 测试用例指导大全

文章图片

test目录结构
【#星光计划2.0#Openharmony单元测试1: 测试用例指导大全】
#星光计划2.0#Openharmony单元测试1: 测试用例指导大全

文章图片

单元测试文件添加 子系统配置添加
子系统配置文件:
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_Hint 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/test.gni")module_output_path = "sub_example/partB"ohos_unittest("ModuleBTest") module_out_path = module_output_pathinclude_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
这个可以参考编写单元测试用例,按照官网文档运行测试用例失败,如下图所示:
#星光计划2.0#Openharmony单元测试1: 测试用例指导大全

文章图片

#星光计划2.0#Openharmony单元测试1: 测试用例指导大全

文章图片

编译成功
编译成功后,可以把编译好的***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

#星光计划2.0#Openharmony单元测试1: 测试用例指导大全

文章图片

如图所示:61行测试结果与预期不符合
想了解更多关于鸿蒙的内容,请访问:
51CTO和华为官方合作共建的鸿蒙技术社区
https://harmonyos.51cto.com/#bkwz
::: hljs-center
#星光计划2.0#Openharmony单元测试1: 测试用例指导大全

文章图片

:::

    推荐阅读