Openharmony 测试用例指导大全

时间:2021-12-23 22:59:53

Openharmony 测试用例指导大全

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

代码目录结构

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

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

Openharmony 测试用例指导大全

test目录结构

Openharmony 测试用例指导大全

单元测试文件添加

子系统配置添加

子系统配置文件:

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
  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
  2. #include
  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::SetUp\n");
  23. }
  24. void ModuleBTest::TearDown() {
  25. printf("ModuleBTest::TearDown\n");
  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/ohos.gni")
  2. import("//build/test.gni")
  3. module_output_path = "sub_example/partB"
  4. ohos_unittest("ModuleBTest") {
  5. module_out_path = module_output_path
  6. include_dirs = [
  7. "//test/example/partB/module/include"
  8. ]
  9. cflags = [
  10. "-Wall",
  11. "-Werror",
  12. ]
  13. sources = [
  14. "unittest/module_test/moduleb_test.cpp"
  15. ]
  16. deps = [
  17. "//third_party/googletest:gtest_main",
  18. ]
  19. external_deps = [ "partB:moduleb_lib", ]
  20. part_name = "partB"
  21. }
  22. group("unittest") {
  23. testonly = true
  24. deps = [ ":ModuleBTest" ]
  25. }

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

编译结果在: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

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

Openharmony 测试用例指导大全
Openharmony 测试用例指导大全

编译成功

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

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

  1. mount -o remount,rw /

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

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

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

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

修改成可执行权后:

  1. chmod 0711 /data/test/ModuleBTest

即可运行单元测试用例:

  1. /data/test/ModuleBTest
Openharmony 测试用例指导大全

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

原文链接:https://harmonyos.51cto.com