c++如何使用Google Test进行单元测试

来源:站长联盟作者:韦伯头衔:草根站长
导读:本期聚焦于小伙伴创作的《c++如何使用Google Test进行单元测试》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《c++如何使用Google Test进行单元测试》有用,将其分享出去将是对创作者最好的鼓励。

Google Test是Google开发的c++单元测试框架,支持多种测试场景,语法简洁且功能强大,适合各类c++项目的单元测试需求。下面将从环境搭建开始,逐步介绍其使用方法。

c++如何使用Google Test进行单元测试

环境搭建

首先需要下载Google Test源码,可通过官方仓库获取,也可以直接使用包管理器安装。以源码编译为例,步骤如下:

  • 下载Google Test源码并解压
  • 进入源码目录,创建build文件夹并进入
  • 执行cmake ..生成构建文件
  • 执行make编译,得到库文件
  • 将生成的头文件和库文件放到系统对应的include和lib目录,或者项目指定的目录中

基础测试用例编写

编写测试用例需要包含Google Test的头文件,使用框架提供的宏定义来声明测试。下面是一个简单的示例,测试一个加法函数是否正确。

#include <gtest/gtest.h>

// 待测试的加法函数
int add(int a, int b) {
    return a + b;
}

// 定义测试用例,第一个参数是测试用例名,第二个是测试名
TEST(AddTest, PositiveNumbers) {
    EXPECT_EQ(add(1, 2), 3);
}

TEST(AddTest, NegativeNumbers) {
    EXPECT_EQ(add(-1, -2), -3);
}

TEST(AddTest, MixedNumbers) {
    EXPECT_EQ(add(1, -2), -1);
}

int main(int argc, char **argv) {
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

上述代码中,TEST宏用于定义单个测试,第一个参数是测试用例的名称,第二个是测试点的名称。EXPECT_EQ是断言宏,用于判断两个值是否相等,如果不相等会输出错误信息但不会导致测试立即终止。

常用断言类型

Google Test提供了多种断言宏,分为EXPECT_*ASSERT_*两类,前者失败不会终止当前测试,后者失败会直接终止当前测试。常用断言如下:

断言宏作用
EXPECT_EQ(val1, val2)判断val1等于val2
EXPECT_NE(val1, val2)判断val1不等于val2
EXPECT_LT(val1, val2)判断val1小于val2
EXPECT_GT(val1, val2)判断val1大于val2
EXPECT_TRUE(condition)判断条件为真
EXPECT_FALSE(condition)判断条件为假

测试Fixture的使用

当多个测试需要共享相同的初始化和清理逻辑时,可以使用测试Fixture,通过继承testing::Test类实现。示例如下:

#include <gtest/gtest.h>
#include <vector>

class VectorTest : public testing::Test {
protected:
    // 每个测试执行前的初始化操作
    void SetUp() override {
        vec.push_back(1);
        vec.push_back(2);
        vec.push_back(3);
    }

    // 每个测试执行后的清理操作
    void TearDown() override {
        vec.clear();
    }

    std::vector<int> vec;
};

// TEST_F用于定义使用Fixture的测试,第一个参数是Fixture类名
TEST_F(VectorTest, SizeCheck) {
    EXPECT_EQ(vec.size(), 3);
}

TEST_F(VectorTest, ElementCheck) {
    EXPECT_EQ(vec[0], 1);
    EXPECT_EQ(vec[1], 2);
    EXPECT_EQ(vec[2], 3);
}

int main(int argc, char **argv) {
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

使用TEST_F宏定义测试时,框架会在每个测试执行前后自动调用SetUpTearDown方法,保证每个测试的环境独立。

编译与运行

假设上述代码保存为test.cpp,编译命令如下(假设Google Test库已经安装到系统目录):

g++ test.cpp -lgtest -lgtest_main -pthread -o test

编译完成后执行生成的可执行文件,即可看到所有测试的运行结果,包括通过和失败的测试数量以及具体错误信息。

Google_Testc++单元测试测试框架修改时间:2026-06-19 06:12:13

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。