Google Test 测试框架
在项目开发中,测试项目是非常重要的,关系到代码的一些逻辑以及性能测试。
由于C++
没有自带的测试框架,Google Test是Google开发的一个C++测试框架,支持自动化测试、死亡测试、参数化测试等多种测试场景。
配置
1
2
3
4
5
6
7
8
9
10
11
12
|
# 克隆Google Test仓库
git clone https://github.com/google/googletest.git
# 进入项目目录
cd googletest/
# 创建并进入build目录
mkdir build && cd build
# 使用CMake配置项目,指定C++17标准
cmake -DCMAKE_CXX_STANDARD=17 ..
# 编译项目
make
# 安装到系统目录(可选)
sudo make install
|
可以不执行最后一条指令,直接把头文件和库文件复制到项目目录中。具体步骤如下:
- 复制头文件:
1
|
cp -r googletest/include/gtest /path/to/your/project/include/
|
- 复制库文件:
1
2
|
cp googletest/build/lib/libgtest.a /path/to/your/project/lib/
cp googletest/build/lib/libgtest_main.a /path/to/your/project/lib/
|
- 在CMakeLists.txt中添加以下配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
# 指定CMake最低版本要求
cmake_minimum_required(VERSION 3.10)
# 定义项目名称
project(gtest)
# 设置C++17标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 生成编译命令数据库(用于IDE支持)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
# 链接库文件目录
link_directories(${CMAKE_SOURCE_DIR}/lib)
# 添加可执行文件
add_executable(${PROJECT_NAME} src/main.cpp)
# 添加头文件目录
target_include_directories(${PROJECT_NAME} PRIVATE
${CMAKE_SOURCE_DIR}/include
)
# 链接Google Test库
target_link_libraries(${PROJECT_NAME}
libgtest.a # Google Test核心库
libgtest_main.a # 提供main()函数的库
)
|
基本用法
- 包含头文件
1
|
#include <gtest/gtest.h>
|
- 编写测试用例
1
2
3
4
5
|
// TEST宏定义测试用例,参数为测试套件名和测试名
TEST(TestSuiteName, TestName) {
// EXPECT_EQ断言检查两个值是否相等
EXPECT_EQ(1, 1); // 断言
}
|
- 运行测试
1
2
3
4
|
int main(int argc, char **argv) {
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
|
常见测试场景
- 简单测试
1
2
3
4
5
|
// 简单测试示例:验证2+2等于4
TEST(MathTest, TwoPlusTwoEqualsFour) {
// 使用EXPECT_EQ断言验证表达式结果
EXPECT_EQ(2 + 2, 4);
}
|
- 测试夹具
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
// 测试夹具类,继承自testing::Test
class QueueTest : public testing::Test {
protected:
// 每个测试用例执行前会调用SetUp
void SetUp() override {
q1_.Enqueue(1); // 初始化测试数据
}
Queue<int> q1_; // 测试对象
};
// TEST_F用于测试夹具,第一个参数是夹具类名
TEST_F(QueueTest, IsEmptyInitially) {
// 验证队列初始状态
EXPECT_EQ(q1_.size(), 1);
}
|
gmock使用
后续有使用到再做演示