首先介绍如何使用CMake集成Google Test并编写测试用例,接着演示通过TEST宏定义测试套件与用例,利用EXPECT_EQ验证结果,并展示运行输出及命令行参数控制测试执行流程。

在C++开发中,单元测试是保证代码质量的重要手段。Google Test(简称 gtest)是目前最流行的C++单元测试框架之一,由Google开源,支持跨平台,使用简单且功能强大。本文将带你快速上手如何用 gtest 编写和运行C++单元测试。
安装与配置 Google Test
gtest 支持多种方式集成到项目中,常见方法有源码编译、包管理器安装或通过 CMake 自动获取。
使用 CMake 集成(推荐方式):
在项目的 CMakeLists.txt 中添加以下内容:
cmake_minimum_required(VERSION 3.14)project(MyTestProject)启用 C++17
set(CMAKE_CXX_STANDARD 17)
立即学习“C++免费学习笔记(深入)”;
使用 FetchContent 获取 gtest
include(FetchContent)FetchContent_Declare(googletestURL https://www.php.cn/link/cb57ba36db3faf9723fcfeade897b7fb)FetchContent_MakeAvailable(googletest)
添加主程序或被测代码
add_executable(mylib math.cpp)
添加测试可执行文件
enable_testing()add_executable(test_math test_math.cpp)target_link_libraries(test_math gtest_main mylib)
注册测试
include(GoogleTest)gtest_discover_tests(test_math)
这样 CMake 会在构建时自动下载并编译 gtest,无需手动安装。
编写第一个测试用例
假设我们有一个简单的加法函数需要测试:
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, AddPositiveNumbers) {EXPECT_EQ(add(2, 3), 5);EXPECT_EQ(add(0, 0), 0);}
TEST(MathTest, AddNegativeNumbers) {EXPECT_EQ(add(-1, -1), -2);EXPECT_EQ(add(-5, 3), -2);}
说明:
TEST(测试套件名, 测试用例名) 定义一个测试。EXPECT_EQ(实际值, 期望值) 判断是否相等,不通过仅记录错误,继续执行。若想中断测试可用 ASSERT_EQ。
运行测试并查看结果
构建项目后运行测试可执行文件(如 test_math),输出类似:
[ RUN ] MathTest.AddPositiveNumbers[ OK ] MathTest.AddPositiveNumbers (0 ms)[ RUN ] MathTest.AddNegativeNumbers[ OK ] MathTest.AddNegativeNumbers (0 ms)SUCCESS: All tests passed.
如果某个断言失败,gtest 会打印具体哪一行出错、期望值与实际值,便于调试。
你也可以使用命令行参数控制测试行为,例如:
--gtest_filter=MathTest.*:只运行 MathTest 套件下的测试。--gtest_list_tests:列出所有测试用例。--gtest_repeat=5:重复执行5次。
高级特性简要介绍
gtest 提供丰富的测试功能,以下是常用扩展:
1. 参数化测试(Parametrized Tests)
适用于对同一函数用多组输入进行测试:
class AddTest : public ::testing::TestWithParam<std::tuple> {};TEST_P(AddTest, AllCases) {int a = std::get(GetParam());int b = std::get(GetParam());int expected = std::get(GetParam());EXPECT_EQ(add(a, b), expected);}
INSTANTIATE_TEST_SUITE_P(NormalCases, AddTest,::testing::Values(std::make_tuple(2, 3, 5),std::make_tuple(-1, 1, 0),std::make_tuple(0, 0, 0)));
2. 测试夹具(Test Fixtures)
当多个测试需要共享初始化/清理逻辑时使用:
class DatabaseTest : public ::testing::Test {protected: void SetUp() override { // 初始化资源,如打开数据库连接 }void TearDown() override { // 清理资源}// 可定义共用数据成员
};
然后使用 TEST_F(DatabaseTest, CanConnect) 来引用该夹具。
基本上就这些。掌握 gtest 的基本结构和常用语法后,你可以为 C++ 项目建立起可靠的测试体系,提升代码健壮性。
以上就是C++如何进行单元测试_C++ Google Test (gtest)框架入门指南的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1488707.html
微信扫一扫
支付宝扫一扫