深圳幻海软件技术有限公司 欢迎您!

Openharmony 测试用例指导大全

2023-02-28

想了解更多内容,请访问:51CTO和华为官方合作共建的鸿蒙技术社区https://harmonyos.51cto.com该文档演示:编写一个动态库libmoduleb_lib.z.so,然后编写一个测试可执行文件ModuleBTest验证动态库接口的正确性。代码目录结构partB/module编译的

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

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

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" 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.

在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":{} 
  } 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

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 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

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; 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.

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" 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

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));  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.

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" ] 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.

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" 
            ] 
        } 
    } 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 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

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



编译成功

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

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

mount -o remount,rw / 
  • 1.

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 
  • 1.

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

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 
  • 1.

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

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

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

https://harmonyos.51cto.com