C++怎么使用Google Test框架_C++ gtest单元测试框架使用教程

Google Test是C++中流行的单元测试框架,支持断言、测试夹具和参数化测试。1. 可通过包管理器或CMake的FetchContent集成;2. 编写测试用例使用TEST宏和EXPECT_EQ等断言;3. CMake构建时链接GTest::gtest_main并启用测试;4. 断言分为EXPECT(继续执行)和ASSERT(终止)两类;5. 测试夹具TEST_F用于共享初始化逻辑;6. 参数化测试TEST_P结合INSTANTIATE_TEST_SUITE_P可对多组数据运行相同逻辑。推荐将测试独立存放并接入CI流程,确保测试快速且隔离。

c++怎么使用google test框架_c++ gtest单元测试框架使用教程

Google Test(简称 gtest)是 C++ 中最流行的单元测试框架之一,由 Google 开发并开源。它支持丰富的断言、测试夹具(Test Fixtures)、参数化测试等功能,适合用于各种规模的 C++ 项目中进行单元测试。

1. 安装与配置 Google Test

在使用 gtest 前,需要先将其集成到你的项目中。常见方式有:通过包管理器安装或从源码编译。

Ubuntu / Debian 系统:

sudo apt-get install libgtest-dev cmakecd /usr/src/gtestsudo cmake .sudo makesudo cp *.a /usr/lib

或者使用 vcpkg(推荐):

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

vcpkg install googletest

也可以在项目中直接使用 CMake 添加:

include(FetchContent)FetchContent_Declare(  googletest  URL https://www.php.cn/link/5d810d095c3f16cce86a8b99060ff44c)FetchContent_MakeAvailable(googletest)

这样可以在项目中自动下载并链接 gtest,无需系统级安装。

2. 编写第一个测试用例

假设你有一个简单的加法函数需要测试:

// math.h#ifndef MATH_H#define MATH_Hint add(int a, int b);#endif
// math.cpp#include "math.h"int add(int a, int b) {    return a + b;}

现在编写测试文件 test_math.cpp:

#include #include "math.h"

// 测试用例:测试 add 函数TEST(MathTest, AddFunction) {EXPECT_EQ(add(2, 3), 5);EXPECT_EQ(add(-1, 1), 0);EXPECT_EQ(add(0, 0), 0);}

// 主函数(如果 gtest 已经链接了 main,这里可以不写)int main(int argc, char **argv) {::testing::InitGoogleTest(&argc, argv);return RUN_ALL_TESTS();}

3. 使用 CMake 构建测试项目

创建 CMakeLists.txt 文件:

cmake_minimum_required(VERSION 3.14)project(MyTestProject)

set(CMAKE_CXX_STANDARD 17)

添加源文件和测试文件

add_library(math_lib math.cpp)

Playground AI
Playground AI

AI图片生成和修图

Playground AI 108
查看详情 Playground AI

使用 FetchContent 获取 gtest

include(FetchContent)FetchContent_Declare(googletestURL https://www.php.cn/link/5d810d095c3f16cce86a8b99060ff44c)FetchContent_MakeAvailable(googletest)

添加测试可执行文件

enable_testing()

add_executable(test_math test_math.cpp)target_link_libraries(test_math math_lib GTest::gtest_main)

注册测试

add_test(NAME MathTest ADD_COMMANDS test_math)

构建流程:

mkdir buildcd buildcmake ..make./test_math

运行后你会看到类似输出:

[==========] Running 1 test from 1 test suite.[----------] Global test environment set-up.[----------] 1 test from MathTest[ RUN      ] MathTest.AddFunction[       OK ] MathTest.AddFunction (0 ms)[----------] 1 test from MathTest (0 ms total)[==========] 1 test from 1 test suite ran. (0 ms total)[  PASSED  ] 1 test.

4. 常用断言介绍

gtest 提供两类断言:ASSERT 和 EXPECT。

ASSERT_*:失败时终止当前测试函数EXPECT_*:失败时记录错误,继续执行后续语句

常见断言示例:

EXPECT_EQ(a, b);     // 相等EXPECT_NE(a, b);     // 不相等EXPECT_LT(a, b);     // 小于EXPECT_LE(a, b);     // 小于等于EXPECT_GT(a, b);     // 大于EXPECT_GE(a, b);     // 大于等于

EXPECT_TRUE(condition); // 条件为真EXPECT_FALSE(condition); // 条件为假

EXPECT_STREQ(s1, s2); // 字符串相等(C风格)EXPECT_STRNE(s1, s2); // 字符串不等EXPECT_THROW(stmt, ExceptionType); // 是否抛出异常EXPECT_NO_THROW(stmt); // 是否不抛出异常

5. 使用测试夹具(Test Fixtures)

当你需要多个测试共享相同数据或初始化逻辑时,可以使用 TEST_F。

class MyStringTest : public ::testing::Test {protected:    void SetUp() override {        str1 = "Hello";        str2 = "World";    }
void TearDown() override {    // 清理资源(如有)}std::string str1;std::string str2;

};

TEST_F(MyStringTest, Concatenate) {std::string result = str1 + " " + str2;EXPECT_EQ(result, "Hello World");}

每个以 TEST_F 定义的测试都会创建一个新的 MyStringTest 实例,确保隔离性。

6. 参数化测试

如果你希望用不同输入运行同一测试逻辑,可以使用参数化测试。

class SquareTest : public ::testing::TestWithParam {};

TEST_P(SquareTest, PositiveNumbers) {int input = GetParam();EXPECT_EQ(input * input, Square(input));}

// 指定测试参数INSTANTIATE_TEST_SUITE_P(Default, SquareTest, ::testing::Values(1, 2, 3, 4));

上述代码会为每个值生成一个独立测试用例。

基本上就这些。掌握以上内容后,你已经可以熟练在 C++ 项目中使用 Google Test 进行单元测试了。实际开发中建议将测试代码放在单独目录,并配合 CI 工具自动运行。不复杂但容易忽略的是保持测试独立性和快速执行。

以上就是C++怎么使用Google Test框架_C++ gtest单元测试框架使用教程的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1481083.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 05:10:53
下一篇 2025年12月19日 05:11:06

相关推荐

发表回复

登录后才能评论
关注微信