0

0

c++怎么写单元测试_c++单元测试方法

裘德小鎮的故事

裘德小鎮的故事

发布时间:2025-10-05 22:31:02

|

240人浏览过

|

来源于php中文网

原创

使用Google Test是C++单元测试的主流方法,需安装框架、编写测试用例并集成到构建系统。首先通过包管理器或源码编译安装Google Test,接着为被测函数(如add)编写测试文件,使用TEST宏定义测试用例,并用EXPECT_EQ等断言验证结果。通过CMake配置项目,链接GTest库并启用测试发现功能,最后编译运行输出测试结果。除Google Test外,Catch2以单头文件形式提供简洁语法,Boost.Test适合已引入Boost的项目,Doctest则更轻量快速。最佳实践包括:单一测试点、清晰命名、独立性、边界覆盖及CI/CD集成。测试私有成员不推荐直接操作,应通过公有接口验证行为,或有限使用友元类。关键在于编写高内聚、低耦合且可测试的代码,配合依赖注入,实现早期测试以减少后期修改成本。

c++怎么写单元测试_c++单元测试方法

在C++中写单元测试,常用的方法是使用成熟的测试框架来组织和运行测试用例。最主流的方式是使用 Google Test(gtest),它由Google开发,功能强大、易于集成,适合各类C++项目。

1. 使用 Google Test 编写单元测试

Google Test 是 C++ 中最广泛使用的单元测试框架。它支持断言、参数化测试、死亡测试等功能。

步骤如下:

  • 安装 Google Test:可以通过包管理器(如 vcpkg、conan、apt)安装,或从 GitHub 克隆源码编译。
  • 编写被测函数,例如:
// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H
int add(int a, int b);
#endif
// math_utils.cpp
#include "math_utils.h"
int add(int a, int b) {
    return a + b;
}
  • 编写测试文件:
// math_utils_test.cpp
#include 
#include "math_utils.h"

TEST(MathTest, AddFunction) { EXPECT_EQ(add(2, 3), 5); EXPECT_EQ(add(-1, 1), 0); EXPECT_EQ(add(0, 0), 0); }

  • 编译并链接 gtest 和测试代码(使用 CMake 示例):
# CMakeLists.txt
cmake_minimum_required(VERSION 3.14)
project(MyTestProject)

enable_testing()

立即学习C++免费学习笔记(深入)”;

add_library(math_utils math_utils.cpp)

find_package(GTest REQUIRED) add_executable(test_math math_utils_test.cpp) target_link_libraries(test_math GTest::gtest_main math_utils)

include(GoogleTest) gtest_discover_tests(test_math)

  • 构建并运行:
mkdir build && cd build
cmake ..
make
./test_math

输出会显示测试通过或失败信息。

Multiavatar
Multiavatar

Multiavatar是一个免费开源的多元文化头像生成器,可以生成高达120亿个虚拟头像

下载

2. 其他 C++ 单元测试框架

除了 Google Test,还有其他轻量或现代的选项:

  • Catch2:单头文件,语法简洁,适合小型项目。
  • Boost.Test:功能全面,适合已使用 Boost 的项目。
  • Doctest:类似 Catch2,更轻量,编译更快。

以 Catch2 为例:

#define CATCH_CONFIG_MAIN
#include "catch2/catch.hpp"

int add(int a, int b) { return a + b; }

TEST_CASE("Addition tests") { REQUIRE(add(2, 3) == 5); REQUIRE(add(-1, 1) == 0); }

只需包含头文件并编译即可运行。

3. 单元测试最佳实践

  • 每个测试只验证一个逻辑点。
  • 测试命名清晰,如 FunctionName_ExpectedBehavior_InputType
  • 保持测试独立,不依赖执行顺序。
  • 覆盖边界情况(如空输入、极端值)。
  • 配合 CI/CD 自动运行测试。

4. 测试私有成员?

C++ 没有直接测试 private 成员的机制。推荐做法:

  • 通过公有接口测试行为。
  • 将测试设为友元(不推荐滥用):
class MyClass {
private:
    int helper() { return 42; }
    friend class MyClassTest; // 友元测试类
};

基本上就这些。Google Test 是大多数团队的首选,搭配 CMake 能高效集成到项目中。关键是写可测试的代码——高内聚、低耦合、依赖注入。测试写得早,后期改得少。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1158

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

215

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2044

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

23

2026.01.19

github中文官网入口 github中文版官网网页进入
github中文官网入口 github中文版官网网页进入

github中文官网入口https://docs.github.com/zh/get-started,GitHub 是一种基于云的平台,可在其中存储、共享并与他人一起编写代码。 通过将代码存储在GitHub 上的“存储库”中,你可以: “展示或共享”你的工作。 持续“跟踪和管理”对代码的更改。

1095

2026.01.21

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

31

2026.01.31

高干文在线阅读网站大全
高干文在线阅读网站大全

汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

20

2026.01.31

无需付费的漫画app大全
无需付费的漫画app大全

想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

28

2026.01.31

漫画免费在线观看地址大全
漫画免费在线观看地址大全

想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

4

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
php初学者入门课程
php初学者入门课程

共10课时 | 0.6万人学习

RunnerGo从入门到精通
RunnerGo从入门到精通

共22课时 | 1.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号