本示例主要介绍如何在HarmonyOS NEXT应用中使用GTest测试C++代码。目前鸿蒙没有提供官方C++测试框架,部分Native开发为主的应用可以参考本文接入三方测试框架保证C++代码质量。GTest 是 C++ 测试框架,具有稳定、跨平台、快速等特点,能够为 C++ 开发人员提供有效的单元测试和集成测试工具。GTest 支持 Linux、macOS 和 Windows 操作系统,同时支持 gcc、clang 和 MSVC 等多种编译器和构建系统。GTest 还提供了大量的失败信息,方便开发人员排查问题。
测试效果预览
GTest接入流程说明:
-
编译GTest 下载好压缩包解压,按照三方库适配的内容构建产物,把对应的平台(arm64-v8a)产物放到对应的lib目录下。本文以CMake交叉编译构建为例。
-
引入头文件和链接库 引入压缩包include下的GTest头文件,可以放在cpp目录下,并将第一步构建好的gtest和gtest_main动态链接库和对应的软链接放到模块下的libs相应目录。
-
编写测试代码 这里用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(); }
-
添加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)
-
生成可执行文件 点击运行,会自动生成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 \
-
获取测试结果 执行测试命令,命令参考如下。
#!/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}"
高性能知识点
不涉及
工程结构&模块类型
不涉及
模块依赖
无
最后
有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。
这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。
希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!
如果你是一名有经验的资深Android移动开发、Java开发、前端开发、对鸿蒙感兴趣以及转行人员,可以直接领取这份资料
获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料
鸿蒙(HarmonyOS NEXT)最新学习路线
-
HarmonOS基础技能
- HarmonOS就业必备技能
- HarmonOS多媒体技术
- 鸿蒙NaPi组件进阶
- HarmonOS高级技能
- 初识HarmonOS内核
- 实战就业级设备开发
有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。
获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料
《鸿蒙 (OpenHarmony)开发入门教学视频》
《鸿蒙生态应用开发V2.0白皮书》
《鸿蒙 (OpenHarmony)开发基础到实战手册》
OpenHarmony北向、南向开发环境搭建
《鸿蒙开发基础》
- ArkTS语言
- 安装DevEco Studio
- 运用你的第一个ArkTS应用
- ArkUI声明式UI开发
- .……
《鸿蒙开发进阶》
- Stage模型入门
- 网络管理
- 数据管理
- 电话服务
- 分布式应用开发
- 通知与窗口管理
- 多媒体技术
- 安全技能
- 任务管理
- WebGL
- 国际化开发
- 应用测试
- DFX面向未来设计
- 鸿蒙系统移植和裁剪定制
- ……
《鸿蒙进阶实战》
- ArkTS实践
- UIAbility应用
- 网络案例
- ……
获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料
总结
总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。