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

鸿蒙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文件为例。

    #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" ]; thenecho "推送 $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}"  
    

高性能知识点

不涉及

工程结构&模块类型

不涉及

模块依赖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/143479.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

基于Java的学生档案管理系统的设计与实现

基于springbootvue实现的学生档案管理系统 &#xff08;源码L文ppt&#xff09;4-065 第4章 系统设计 4.1 总体功能设计 学生档案管理系统的总体功能设计包括学生信息管理、课程管理、教师信息管理、成绩管理和系统配置管理。系统将提供用户友好的界面&#xff0c;支…

Cpp类和对象(上)(3)

文章目录 前言一、面向过程与面向对象初步认识二、类的引入三、类的定义四、类的访问限定符及类的封装类的访问限定符类的封装 五、类的作用域(类域)六、类的实例化七、类对象模型如何计算类对象的大小类对象的存储方式猜测 八、this指针this指针的引出this指针的特性 九、C语言…

天池Fashion AI 比赛失败经历分享

关联比赛: FashionAI全球挑战赛—服饰关键点定位 昨天是天池Fashion AI初赛Deadline&#xff0c; 成绩出来复赛都没能进&#xff0c;虽然结果很遗憾&#xff0c;但在比赛的过程中也接触到了不少的新东西&#xff0c;希望能在这里把我尝试过的方法都分享出来。作为对自己的总结…

EPLAN中如何切换编辑区的背景颜色为黑色?

EPLAN中如何切换编辑区的背景颜色为黑色&#xff1f; 如下图所示&#xff0c;打开EPLAN软件&#xff0c;打开或新建一个项目&#xff0c; 如下图所示&#xff0c;点击选项----设置&#xff0c; 在弹出的窗口中找到用户----图形的编辑------2D&#xff0c;在右侧找到颜色设置---…

便携式气象监测站的工作原理

型号&#xff1a;TH-BQX9】便携式气象环境监测站是一种集数据采集、处理、传输于一体的便携式设备&#xff0c;主要用于实时、准确地监测环境中的多种气象要素。便携式气象环境监测站通常能够监测多种气象参数&#xff0c;包括但不限于温度、湿度、风速、风向、气压、降雨量、太…

Java虚拟机 - 实战篇

一、内存调优 1. 什么是内存泄漏 &#xff08;1&#xff09;内存溢出和内存泄漏 2. 监控Java内存的常用工具 &#xff08;1&#xff09;Top命令 &#xff08;2&#xff09;VisualVM &#xff08;3&#xff09;Arthas &#xff08;4&#xff09;Prometheus Grafana &#xff…

【C++STL简介】——我与C++的不解之缘(八)

前言 学过了C的模版&#xff0c;接下来学习C中的STL&#xff08;标准模版库&#xff09;&#xff0c;先来了解一下STL是啥 一、什么是STL STL&#xff08;standard template libaray 标准模版库&#xff09;&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的…

cmake的下载与安装

介绍&#xff1a; CMake是一个跨平台的安装&#xff08;编译&#xff09;工具&#xff0c;可以用简单的语句来描述所有平台的安装(编译过程)。 能够输出各种各样的makefile或者project文件&#xff0c;能测试编译器所支持的C特性,类似UNIX下的automake。 CMake 的组态档取名为…

[Java]SpringBoot能力进阶

配置优先级 SpringBoot中支持三种格式的配置文件 优先级: application.properties文件 > application.yml文件 > application.yaml文件 SpringBoot除了通过配置文件配置属性, 还支持Java系统属性和命令行参数的方式 进行属性配置 1.在IDEA中配置java系统属性和命令行参…

网络安全-shire写任务计划、反弹shell、写私钥

目录 一、环境 二、 介绍 三、开始做题 四、写公钥 一、环境 网上自己找 二、 介绍 我们经过前面文章很清楚知道&#xff0c;shiro是将数据存储在内存当中&#xff0c;内存落盘实现一个数据存储&#xff0c;而当其结合python&#xff0c;python将登录的session存储到shiro里…

python绘制月亮

import matplotlib import matplotlib.pyplot as plt import moviepy.editor as mpymatplotlib.rcParams[font.family] SimHei# 坐标列表 positions [(0, 0), (1 / 4, 1 / 4), (1 / 3, 1 / 4), (1 / 2, 1 / 4), (2 / 3, 1 / 4),(3 / 4, 1 / 4), (1, 1 / 4), (5 / 4, 1 / 4), …

桌面上的文件突然不见了怎么找回?快速恢复技巧分享

在日常使用电脑的过程中&#xff0c;我们习惯于将经常使用的文件或者快捷方式放置在桌面上&#xff0c;以便于快速访问。然而&#xff0c;有时我们会发现桌面上的某些文件突然不见了&#xff0c;这可能会让人感到惊慌和困惑。面对这种情况&#xff0c;我们应该如何找回这些突然…

路由器全局配置DHCP实验简述

一、路由器配置 reset saved-configuration Warning: The action will delete the saved configuration in the device. The configuration will be erased to reconfigure. Continue? [Y/N]:y Warning: Now clearing the configuration in the device. Info: Succeeded in c…

02 基于STM32的按键控制继电器驱动电机

本专栏所有源资料都免费获取&#xff0c;没有任何隐形消费。 注意事项&#xff1a;STM32仿真会存在各种各样BUG&#xff0c;且尽量按照同样仿真版本使用。本专栏所有的仿真都采用PROTEUS8.15。 本文已经配置好STM32F103C8T6系列&#xff0c;在PROTUES仿真里&#xff0c;32单片…

教程 | ArcGIS Pro如何自动保存数据编辑内容

目录 1、工程自动保存 2、数据编辑自动保存 世界上最痛苦的事情就是&#xff1a; 软件崩溃&#xff0c;我没保存&#xff01;&#xff01;&#xff01; 电脑死机&#xff0c;我没保存&#xff01;&#xff01;&#xff01; 突然断电&#xff0c;我没保存&#xff01;&…

开源项目的悲哀

开源下载器 Aria 的开发者因为其项目被诈骗人员使用&#xff0c;导致开发者遭受跨省追捕&#xff0c;作者于 2024 年 8 月 16 日在 GitHub 上宣布删除了项目的全部源码。 Aria 是一个高性能、轻量级、易于使用的文件下载框架&#xff0c;主要应用于Android 平台&#xff0c;拥有…

10个A/B测试指标以分析结果和衡量成功

为什么A/B测试分析很重要&#xff1f; 到现在&#xff0c;您可能已经熟悉了A/B测试的基本概念及其用途。 简而言之&#xff0c;A/B测试是将两个或多个着陆页、营销资产或单个元素&#xff08;如标题&#xff09;进行对比&#xff0c;以帮助您找出哪个表现最好。 这些测试帮助…

Varjo在芬兰开设新工厂,以满足国防部门在XR模拟训练中的需求

在军事国防领域&#xff0c;全新技术的投入使用最看重的就是保密与安全。作为全球领先的XR头戴式显示器提供商Varjo&#xff0c;近日正式宣布将在位于芬兰的赫尔辛基开设一家新的安全制造工厂。 此次工厂扩建将使Varjo能够满足国防训练和模拟领域对其高分辨率XR解决方案日益增…

Qwen2-VL环境搭建推理测试

引子 2024年8月30号&#xff0c;阿里推出Qwen2-VL&#xff0c;开源了2B/7B模型&#xff0c;处理任意分辨率图像无需分割成块。之前写了一篇Qwen-VL的博客&#xff0c;感兴趣的童鞋请移步&#xff08;Qwen-VL环境搭建&推理测试-CSDN博客&#xff09;&#xff0c;这么小的模…

揭秘!当业务方需求模糊,产品经理如何施展‘化雾为金’的神奇策略!

引言 在产品管理的实践中&#xff0c;产品经理经常会遇到业务方无法清晰表达需求的情况。这可能是由于业务方对问题的理解不够深入&#xff0c;或者缺乏将业务需求转化为产品需求的经验。作为资深产品经理&#xff0c;我们需要采取一系列策略来应对这一挑战&#xff0c;确保产…