【鸿蒙实战开发】C++ 组件单元测试及覆盖率统计方案探索

一、背景

蒙NEXT操作系统中,上层的 ArkUI最终都会通过底层的 c++组件实现。而且随着鸿蒙的兴起,各大厂商纷纷拿出了各自的跨端方案,而c++组件复用是其中的一个主流方向。
为了确保这些组件的稳定性和可靠性,进行单元测试是其中很重要的一环,而目前鸿蒙的官方文档和开发工具中关于单元测试介绍更多是针对 ArkTs,c++单测的相关资料,因此本文尝试探究鸿蒙 NEXT c++组件单元测试及覆盖率统计的可行性方案。

二、单测框架的选择

在众多的 C++ 单元测试框架中,我们选择了 Google Test。它是一个成熟且功能强大的测试框架,广泛用于 C++ 项目的测试。
本文不会详细介绍Google Test的使用方法,如果你对 Google Test 感兴趣,可以访问官方文档了解更多详情。

三、单元测试接入

本文将介绍两种在鸿蒙系统中接入单元测试的方案,各有优缺点:

1.so库直接接入,通过应用触发测试
2.编译为可执行文件,通过命令行触发测试

方案一:so库接入单测,应用运行时触发

优势与缺点
优势:

●更加接近真实运行环境,减少了模拟(mock)的工作量。
●可以在真机上运行测试。

缺点:

●自动化收集测试结果较为繁琐。

核心步骤:

1.配置 CMake:启用测试并添加 Google Test 依赖。

    enable_testing()

    # 使用 FetchContent 来下载和添加 Google Test
    include(FetchContent)
    FetchContent_Declare(
        googletest
        URL https://github.com/google/googletest/archive/4b21f1abddaf7d28388d7430bab69a81eccb1909.zip
    )
    FetchContent_MakeAvailable(googletest)

    # 查找测试文件
    file(GLOB TESTSF
        tests/*.cpp
        tests/**/*.h
    )

2.配置 CMake:引入测试依赖。

add_library(entry SHARED ${SOURCE_CORE} ${TESTS_CODE})
target_link_libraries(entry PUBLIC libace_napi.z.so libhilog_ndk.z.so gtest_main gmock_main)
#配置断言失效
target_compile_definitions(entry PRIVATE NDEBUG)

3.手动触发测试:应用运行时在调用 Google Test API。

#include <gtest/gtest.h>

::testing::InitGoogleTest();
::testing::TestEventListeners &listeners = ::testing::UnitTest::GetInstance()->listeners();
CustomTestListener *listener = new CustomTestListener();
listeners.Append(listener);
RUN_ALL_TESTS();
delete listener;

4.配置监听器:实现自定义监听器以打印测试结果。

可以根据各自的需求,设置不同监听,打印所需日志

#ifndef GTestHelper_CUSTOMTESTLISTENER_H
#define GTestHelper_CUSTOMTESTLISTENER_H
#include <gtest/gtest.h>
#include "TestLog.h"
namespace GTestHelper {

class CustomTestListener : public testing::TestEventListener {
public:
    void OnTestProgramStart(const testing::UnitTest &unit_test) override {
        LOG_INFO("Starting test program...");
        testCaseIndex = 1;
        LOG_INFO("=======================================================================
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值