Featured image of post Google Test 测试框架

Google Test 测试框架

谷歌测试框架的配置和使用

|
761 字
|

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. 复制头文件:
1
cp -r googletest/include/gtest /path/to/your/project/include/
  1. 复制库文件:
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/
  1. 在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. 包含头文件
1
#include <gtest/gtest.h>
  1. 编写测试用例
1
2
3
4
5
// TEST宏定义测试用例,参数为测试套件名和测试名
TEST(TestSuiteName, TestName) {
    // EXPECT_EQ断言检查两个值是否相等
    EXPECT_EQ(1, 1);  // 断言
}
  1. 运行测试
1
2
3
4
int main(int argc, char **argv) {
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

常见测试场景

  1. 简单测试
1
2
3
4
5
// 简单测试示例:验证2+2等于4
TEST(MathTest, TwoPlusTwoEqualsFour) {
    // 使用EXPECT_EQ断言验证表达式结果
    EXPECT_EQ(2 + 2, 4);
}
  1. 测试夹具
 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使用

后续有使用到再做演示

使用 Hugo 构建
主题 StackJimmy 设计