OpenHarmony实战开发-GTest接入应用指导

567 篇文章 4 订阅
555 篇文章 0 订阅

介绍

本示例主要介绍如何在HarmonyOS NEXT应用中使用GTest测试C++代码。目前鸿蒙没有提供官方C++测试框架,部分Native开发为主的应用可以参考本文接入三方测试框架保证C++代码质量。GTest 是 C++ 测试框架,具有稳定、跨平台、快速等特点,能够为 C++ 开发人员提供有效的单元测试和集成测试工具。GTest 支持 Linux、macOS 和 Windows 操作系统,同时支持 gcc、clang 和 MSVC 等多种编译器和构建系统。GTest 还提供了大量的失败信息,方便开发人员排查问题。

测试效果预览

在这里插入图片描述

GTest接入流程说明:

1.编译GTest 下载好压缩包解压,按照三方库适配的内容构建产物,把对应的平台(arm64-v8a)产物放到对应的lib目录下。本文以CMake交叉编译构建为例。

2.引入头文件和链接库 引入压缩包include下的GTest头文件,可以放在cpp目录下,并将第一步构建好的gtest和gtest_main动态链接库和对应的软链接放到模块下的libs相应目录。

3.编写测试代码 这里用nativesavepictosandbox的dl_util.cpp文件为例。

#include "gtest/ohosTest.h"
#include "dl_util.h"
#include <dlfcn.h>
#include <ostream>
const char libCurlDownload[256] = "libcurlDownload.so";
typedef std::string (*DownloadInternetFileFunc)(char *, char *);

/**
* TestSuiteName_TestCaseName 的组合应该是唯一的。
* GTest 生成的类名是带下划线的,所以些名字里不建议有下划线
* TestSuiteName 用来汇总 test case,相关的 test case 应该是相同的 TestSuiteName。一个文件里只能有一个 TestSuiteName,建议命名为这个文件测试的类名。
* TestCaseName 是测试用例的名称。建议有意义,比如“被测试的函数名称”,或者被测试的函数名的不同输入的情况。
*/
TEST(DlUtilTest, loadLibraryTest) {
   void *handler = load_library(libCurlDownload);
   // 判断返回不为空指针
   ASSERT_NE(handler, nullptr);
   dlclose(handler);
}

GTEST_API_ int main(int args, char **argv) {
   printf("Running main() from %s\n", __FILE__);
   testing::InitGoogleTest(&args, argv);
   return RUN_ALL_TESTS();
}

4.添加CMakeLists代码 在CMakeLists中添加用于测试的可执行文件编译逻辑。

# 设置动态链接库位置
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/)
# 设置测试文件的检索范围
set(TEST_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../)
# 获取文件下所有的.cpp后缀的源文件
file(GLOB_RECURSE TEST_SRC_FILES ${TEST_SRC_DIR}/*.cpp)
# 测试文件和源文件打到一个可执行测试文件中
add_executable(util_test ${TEST_SRC_FILES} dl_util.cpp)
target_link_libraries(util_test PUBLIC gtest gtest_main libace_napi.z.so libcurlDownload.so libhilog_ndk.z.so librawfile.z.so)

5.生成可执行文件 点击运行,会自动生成build文件夹,在build/default/intermediates/cmake/default/obj/arm64-v8a/路径下会生成 util_test.exe 可执行测试文件。如果流水线化测试诉求,可以使用SDK文件下的CMake工具(native/build-tools/cmake/bin/cmake)用命令生成可执行文件,命令参考如下。

# HARMONY_SDK就是是鸿蒙SDK目录
${HARMONY_SDK}/native/build-tools/cmake/bin/cmake \
-DCMAKE_SYSROOT=${HARMONY_SDK}/native/sysroot \
-DOHOS_STL=c++_static \
-DCMAKE_TOOLCHAIN_FILE=${HARMONY_SDK}/native/build/cmake/ohos.toolchain.cmake \
-DOHOS_ARCH=arm64-v8a \
-DOHOS_PLATFORM=OHOS \
-DCMAKE_BUILD_TYPE=Debug \

6.获取测试结果 执行测试命令,命令参考如下。

#!/bin/bash
# 设置默认名称,和CMakelist保持一致
EXECUTABLE_FILE_NAME=util_test
# 动态链接库的位置
LIB_DIR="libs/arm64-v8a"
# 可执行文件的位置,必须要先生成
EXE_DIR="build/default/intermediates/cmake/default/obj/arm64-v8a"
LIB_DIR=$(cd "$LIB_DIR" && pwd)
EXE_DIR=$(cd "$EXE_DIR" && pwd)
# 推送动态链接库到设备上
for file in "$LIB_DIR"/*; do
if [ -f "$file" ]; then
   echo "推送 $file 到设备..."
   hdc file send "$file" "/data/local/tmp/"
fi
done

# 推送可执行测试文件到设备上
hdc file send "${EXE_DIR}/${EXECUTABLE_FILE_NAME}" /data/local/tmp/
# 设置可执行权限
hdc shell chmod +x /data/local/tmp/${EXECUTABLE_FILE_NAME}
hdc shell "export LD_LIBRARY_PATH=/data/local/tmp; /data/local/tmp/${EXECUTABLE_FILE_NAME}"  

高性能知识点

不涉及

工程结构&模块类型

不涉及

模块依赖

我这边特意整理了《鸿蒙语法ArkTS、TypeScript、ArkUI、实战开发视频教程》以及《鸿蒙生态应用开发白皮书V2.0PDF》《鸿蒙开发学习手册》(共计890页)鸿蒙开发资料等…希望对大家有所帮助:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

鸿蒙语法ArkTS、TypeScript、ArkUI等…视频教程:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

在这里插入图片描述

OpenHarmony APP开发教程步骤:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

在这里插入图片描述

鸿蒙生态应用开发白皮书V2.0PDF:https://docs.qq.com/doc/DZVVkRGRUd3pHSnFG

在这里插入图片描述

应用开发中级就业技术:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

在这里插入图片描述

应用开发中高级就业技术:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

在这里插入图片描述

南北双向高工技能基础:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

在这里插入图片描述

全网首发-工业级 南向设备开发就业技术:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

在这里插入图片描述

《鸿蒙开发学习手册》:

如何快速入门:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.基本概念
2.构建第一个ArkTS应用
3.……

在这里插入图片描述

开发基础知识:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.应用基础知识
2.配置文件
3.应用数据管理
4.应用安全管理
5.应用隐私保护
6.三方应用调用管控机制
7.资源分类与访问
8.学习ArkTS语言
9.……

在这里插入图片描述

基于ArkTS 开发:https://docs.qq.com/doc/DZVVBYlhuRkZQZlB3

1.Ability开发
2.UI开发
3.公共事件与通知
4.窗口管理
5.媒体
6.安全
7.网络与链接
8.电话服务
9.数据管理
10.后台任务(Background Task)管理
11.设备管理
12.设备使用信息统计
13.DFX
14.国际化开发
15.折叠屏系列
16.……

在这里插入图片描述

  • 24
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值