此文档演示:L2编写一个动态库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::SetUpn");
- }
- void ModuleBTest::TearDown() {
- printf("ModuleBTest::TearDownn");
- }
- /**
- * @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_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
编译结果在:outohos-arm-releasesub_examplepartB
编译ModuleBTest命令如下:
./build.sh --product-name Hi3516DV300 --ccache --build-target ModuleBTest
编译结果在:outohos-arm-releasetestsunittestsub_examplepartB
测试运行参考文档:
https://gitee.com/openharmony/test_developertest
这个可以参考编写单元测试用例,按照官网文档运行测试用例失败,如下图所示:
编译成功编译成功后,可以把编译好的***Test用hdc_std.exe发送到Hi3516DV300开发板中去运行,在串口终端上输出测试用例的测试结果。
修改系统权限,目录能读能写:
libmoduleb_lib.z.so 放入开发板/system/lib/的目录下:- hdc_std.exe file send Z:outohos-arm-releasesub_examplepartBlibmoduleb_lib.z.so /system/lib
复制代码
ModuleBTest 放入开发板/data/test目录下。 /data/test是本人在开发板上自建的目录。- hdc_std.exe file send Z:outohos-arm-releasetestsunittestsub_examplepartBModuleBTest /data/test
复制代码
修改成可执行权后:- chmod 0711 /data/test/ModuleBTest
复制代码
即可运行单元测试用例:
如图所示:61行测试结果与预期不符合