[文章]Openharmony 单元测试1: 测试用例指导大全

阅读量0
0
0

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



代码目录结构partB/module编译的是动态库,在子系统sub_example中。
partB的目录结构为//test/example/partB


test目录结构


单元测试文件添加

子系统配置添加子系统配置文件:
code-v3.0-LTS/OpenHarmony/build/subsystem_config.json
配置文件添加的内容如下:
  1.   ...
  2.   ,
  3.   "sub_example": {
  4.     "project": "hmf/test",
  5.     "path": "test/example",
  6.     "name": "sub_example",
  7.     "dir": "test"
  8.   }
复制代码

在Hi3516DV300.json中添加partB的配置
Hi3516DV300.json的位置:
productdefine/common/products/Hi3516DV300.json
添加的内容如下:
  1. {
  2.   "product_name": "Hi3516DV300",
  3.   "product_company": "hisilicon",
  4.   "product_device": "hi3516dv300",
  5.   "version": "2.0",
  6.   "type": "standard",
  7.   "product_build_path": "device/hisilicon/build",
  8.   "parts":{
  9.     ...
  10.     "sub_example:partB":{}
  11.   }
  12. }
复制代码

example/partB/module/include/moduleB.h内容如下
  1. #ifndef MODULE_B_H
  2. #define MODULE_B_H

  3. int Sub(int a, int b);
  4. int Add(int a, int b);
  5. #endif //MODULE_B_H
复制代码


example/partB/module/include/moduleB.c内容如下
  1. #include "moduleB.h"
  2. #include <stdio.h>

  3. int Sub(int a, int b)
  4. {
  5.     return a - b;
  6. }

  7. int Add(int a, int b)
  8. {
  9.     return a + b;
  10. }
复制代码


example/partB/module/BUILD.gn内容如下
  1. import("//build/ohos.gni")

  2. config("moduleb_lib_config") {
  3.   include_dirs = [ "include" ]
  4. }
  5. ohos_shared_library("moduleb_lib") {
  6.   sources = [
  7.     "//test/example/partB/module/include/moduleB.h",
  8.     "//test/example/partB/module/src/moduleB.c"
  9.   ]
  10.   public_configs = [ ":moduleb_lib_config" ]
  11.   part_name = "partB"
  12.   subsystem_name = "sub_example"
  13. }
复制代码


example/partB/module/test/unittest/module_test/moduleb_test.cpp内容如下
  1. #include <gtest/gtest.h>
  2. #include <cstdio>
  3. extern "C" {
  4. #include "moduleB.h"
  5. }

  6. using namespace testing::ext;

  7. // 继承googletext的Test类
  8. class ModuleBTest : public testing::Test {
  9. public:
  10.     static void SetUpTestCase();
  11.     static void TearDownTestCase();
  12.     void SetUp();
  13.     void TearDown();
  14. };

  15. void ModuleBTest::SetUpTestCase() {}

  16. void ModuleBTest::TearDownTestCase() {}

  17. void ModuleBTest::SetUp()
  18. {
  19.     /**
  20.      * @tc.setup: reset perfStat
  21.      */
  22.     printf("ModuleBTest::SetUpn");
  23. }

  24. void ModuleBTest::TearDown() {
  25.     printf("ModuleBTest::TearDownn");
  26. }

  27. /**
  28. * @tc.name: ModuleBTest001
  29. * @tc.desc: Test bind start time and end
  30. * @tc.type: FUNC
  31. * @tc.require: AR000CUF6O
  32. */
  33. HWTEST_F(ModuleBTest, ModuleBTest001, TestSize.Level0)
  34. {
  35.     // step 1:调用函数获取结果
  36.     int actual = Sub(4, 1);

  37.     // Step 2:使用断言比较预期与实际结果
  38.     EXPECT_EQ(4, actual);
  39. }

  40. /**
  41. * @tc.name: ModuleBTest002
  42. * @tc.desc: invalid end time test
  43. * @tc.type: FUNC
  44. * @tc.require: AR000CUF6O
  45. */
  46. HWTEST_F(ModuleBTest, ModuleBTest002, TestSize.Level0)
  47. {
  48.     // 判断Add函数调用的结果是不是期望的12
  49.     EXPECT_EQ(12, Add(5, 7));
  50. }
复制代码


example/partB/module/test/BUILD.gn内容如下:
  1. import("//build/test.gni")

  2. module_output_path = "sub_example/partB"

  3. ohos_unittest("ModuleBTest") {
  4.   module_out_path = module_output_path

  5.   include_dirs = [
  6.     "//test/example/partB/module/include"
  7.    ]
  8.   cflags = [
  9.     "-Wall",
  10.     "-Werror",
  11.   ]
  12.   sources = [
  13.     "unittest/module_test/moduleb_test.cpp"
  14.   ]

  15.   deps = [
  16.     "//third_party/googletest:gtest_main",
  17.   ]
  18.   external_deps = [ "partB:moduleb_lib", ]
  19.   part_name = "partB"
  20. }

  21. group("unittest") {
  22.   testonly = true
  23.   deps = [ ":ModuleBTest" ]
  24. }
复制代码


example/ohos.build内容如下注意:“test_list”,为单元测试添加,把ModuleBTest添加到编译系统中去:
  1. {
  2.     "subsystem": "sub_example",
  3.     "parts": {
  4.         "partB": {
  5.             "module_list": [
  6.                 "//test/example/partB/module:moduleb_lib"
  7.             ],
  8.             "inner_kits": [
  9.                 {
  10.                     "type": "so",
  11.                     "name": "//test/example/partB/module:moduleb_lib",
  12.                     "header": {
  13.                         "header_files": [
  14.                             "moduleB.h"
  15.                         ],
  16.                         "header_base": "//test/example/partB/module/include"
  17.                     }
  18.                 }
  19.             ],
  20.             "system_kits": [],
  21.             "test_list": [
  22.                 "//test/example/partB/module/test:unittest"
  23.             ]
  24.         }
  25.     }
  26. }
复制代码


编译:重编编译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/的目录下:
  1. hdc_std.exe file send Z:outohos-arm-releasesub_examplepartBlibmoduleb_lib.z.so /system/lib
复制代码


ModuleBTest 放入开发板/data/test目录下。 /data/test是本人在开发板上自建的目录。
  1. hdc_std.exe file send Z:outohos-arm-releasetestsunittestsub_examplepartBModuleBTest /data/test
复制代码


修改成可执行权后:
  1. chmod 0711 /data/test/ModuleBTest
复制代码


即可运行单元测试用例:
  1. /data/test/ModuleBTest
复制代码



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

回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友