首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

HarmonyOS开发实战( Beta5.0)使用GTest测试C++案例

  • 25-03-03 06:41
  • 2760
  • 9079
blog.csdn.net

鸿蒙HarmonyOS开发往期必看:

HarmonyOS NEXT应用开发性能实践总结

最新版!“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零基础入门到精通)


介绍

本示例主要介绍如何在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文件为例。

    1. #include "gtest/ohosTest.h"
    2. #include "dl_util.h"
    3. #include <dlfcn.h>
    4. #include <ostream>
    5. const char libCurlDownload[256] = "libcurlDownload.so";
    6. typedef std::string (*DownloadInternetFileFunc)(char *, char *);
    7. /**
    8. * TestSuiteName_TestCaseName 的组合应该是唯一的。
    9. * GTest 生成的类名是带下划线的,所以些名字里不建议有下划线
    10. * TestSuiteName 用来汇总 test case,相关的 test case 应该是相同的 TestSuiteName。一个文件里只能有一个 TestSuiteName,建议命名为这个文件测试的类名。
    11. * TestCaseName 是测试用例的名称。建议有意义,比如“被测试的函数名称”,或者被测试的函数名的不同输入的情况。
    12. */
    13. TEST(DlUtilTest, loadLibraryTest) {
    14. void *handler = load_library(libCurlDownload);
    15. // 判断返回不为空指针
    16. ASSERT_NE(handler, nullptr);
    17. dlclose(handler);
    18. }
    19. GTEST_API_ int main(int args, char **argv) {
    20. printf("Running main() from %s\n", __FILE__);
    21. testing::InitGoogleTest(&args, argv);
    22. return RUN_ALL_TESTS();
    23. }
  4. 添加CMakeLists代码 在CMakeLists中添加用于测试的可执行文件编译逻辑。

    1. # 设置动态链接库位置
    2. link_directories(${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/)
    3. # 设置测试文件的检索范围
    4. set(TEST_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../)
    5. # 获取文件下所有的.cpp后缀的源文件
    6. file(GLOB_RECURSE TEST_SRC_FILES ${TEST_SRC_DIR}/*.cpp)
    7. # 测试文件和源文件打到一个可执行测试文件中
    8. add_executable(util_test ${TEST_SRC_FILES} dl_util.cpp)
    9. 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)用命令生成可执行文件,命令参考如下。

    1. # HARMONY_SDK就是是鸿蒙SDK目录
    2. ${HARMONY_SDK}/native/build-tools/cmake/bin/cmake \
    3. -DCMAKE_SYSROOT=${HARMONY_SDK}/native/sysroot \
    4. -DOHOS_STL=c++_static \
    5. -DCMAKE_TOOLCHAIN_FILE=${HARMONY_SDK}/native/build/cmake/ohos.toolchain.cmake \
    6. -DOHOS_ARCH=arm64-v8a \
    7. -DOHOS_PLATFORM=OHOS \
    8. -DCMAKE_BUILD_TYPE=Debug \
  6. 获取测试结果 执行测试命令,命令参考如下。

    1. #!/bin/bash
    2. # 设置默认名称,和CMakelist保持一致
    3. EXECUTABLE_FILE_NAME=util_test
    4. # 动态链接库的位置
    5. LIB_DIR="libs/arm64-v8a"
    6. # 可执行文件的位置,必须要先生成
    7. EXE_DIR="build/default/intermediates/cmake/default/obj/arm64-v8a"
    8. LIB_DIR=$(cd "$LIB_DIR" && pwd)
    9. EXE_DIR=$(cd "$EXE_DIR" && pwd)
    10. # 推送动态链接库到设备上
    11. for file in "$LIB_DIR"/*; do
    12. if [ -f "$file" ]; then
    13. echo "推送 $file 到设备..."
    14. hdc file send "$file" "/data/local/tmp/"
    15. fi
    16. done
    17. # 推送可执行测试文件到设备上
    18. hdc file send "${EXE_DIR}/${EXECUTABLE_FILE_NAME}" /data/local/tmp/
    19. # 设置可执行权限
    20. hdc shell chmod +x /data/local/tmp/${EXECUTABLE_FILE_NAME}
    21. hdc shell "export LD_LIBRARY_PATH=/data/local/tmp; /data/local/tmp/${EXECUTABLE_FILE_NAME}"

高性能知识点

不涉及

工程结构&模块类型

不涉及

模块依赖

鸿蒙NEXT全套学习资料
微信名片
注:本文转载自blog.csdn.net的让开,我要吃人了的文章"https://blog.csdn.net/weixin_55362248/article/details/142333975"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top