Google Test测试框架库的使用方法

一、安装方法

1、Linux

sudo apt update
sudo apt install libgtest-dev
sudo apt install cmake g++   # 编译工具


#libgtest-dev需要手动编译:
cd /usr/src/gtest
sudo cmake .
sudo make
sudo cp lib/*.a /usr/lib

Cmake工程调用:

find_package(GTest REQUIRED)
target_link_libraries(my_test PRIVATE GTest::GTest GTest::Main pthread)

2、MacOS

brew install googletest

CMake工程调用

find_package(GTest REQUIRED)
target_link_libraries(my_test PRIVATE GTest::GTest GTest::Main)

3、Windows

  • 推荐vcpkg方式(Powershell)
git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
.\bootstrap-vcpkg.bat
.\vcpkg install gtest

把vcpkg路径加到CMake:

cmake -DCMAKE_TOOLCHAIN_FILE=path/to/vcpkg/scripts/buildsystems/vcpkg.cmake ..
  • 自己编译源码

去 GoogleTest GitHub 下载
用 CMake 打开并生成 Visual Studio 工程
编译安装

二、GTest的基本用法

假设你有个函数:

int add(int a, int b) {
    return a + b;
}

写一个测试文件:

#include <gtest/gtest.h>

TEST(AddTest, HandlesPositiveNumbers) {
    EXPECT_EQ(add(2, 3), 5);  // 期望结果为 5
}

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

CmakeLists.txt示例

cmake_minimum_required(VERSION 3.14)
project(MyTest)

enable_testing()

find_package(GTest REQUIRED)

add_executable(my_test test_add.cpp)
target_link_libraries(my_test PRIVATE GTest::GTest GTest::Main pthread)

add_test(NAME MyTest COMMAND my_test)

编译&运行(用IDE工具也可以)

mkdir build && cd build
cmake ..
make
ctest   # 或 ./my_test

运行结果:

[ RUN      ] AddTest.HandlesPositiveNumbers
[       OK ] AddTest.HandlesPositiveNumbers
[ RUN      ] AddTest.HandlesNegativeNumbers
[       OK ] AddTest.HandlesNegativeNumbers
[==========] 2 tests from 1 test case ran.

三、常用TEST宏(写测试用例)和断言(写检查点)

1、TEST宏最基本写法

TEST(TestCaseName, TestName) {
    // 测试内容
}
//TestCaseName:一组相关测试的名字(逻辑上相当于“类名”)。
//TestName:具体的测试用例名字。

2、断言(检查点)

GTest 提供了很多断言,可以简单分为几类:
1. 相等/不等
    •    EXPECT_EQ(val1, val2) —— 判断相等
    •    EXPECT_NE(val1, val2) —— 判断不相等
    •    EXPECT_LT(val1, val2) —— 小于
    •    EXPECT_LE(val1, val2) —— 小于等于
    •    EXPECT_GT(val1, val2) —— 大于
    •    EXPECT_GE(val1, val2) —— 大于等于
2. 布尔检查
    •    EXPECT_TRUE(expr)
    •    EXPECT_FALSE(expr)
3. 字符串比较
    •    EXPECT_STREQ(str1, str2) —— C 风格字符串相等
    •    EXPECT_STRNE(str1, str2) —— 不相等
    •    EXPECT_STRCASEEQ(str1, str2) —— 忽略大小写相等
    •    EXPECT_STRCASENE(str1, str2) —— 忽略大小写不相等
4. 浮点数比较
浮点数不能用 EXPECT_EQ,要用:
    •    EXPECT_FLOAT_EQ(val1, val2) —— float 精确比较
    •    EXPECT_DOUBLE_EQ(val1, val2) —— double 精确比较
    •    EXPECT_NEAR(val1, val2, abs_error) —— 允许误差范围
5. 异常检查
    •    EXPECT_THROW(statement, ExceptionType) —— 期待抛出某异常
    •    EXPECT_ANY_THROW(statement) —— 期待抛出任何异常
    •    EXPECT_NO_THROW(statement) —— 期待不抛出异常
 

3、EXPECT_* vs ASSERT_*

•    EXPECT:失败后继续执行后面的代码。
•    ASSERT:失败就立刻中止当前测试函数。

TEST(Demo, AssertVsExpect) {
    EXPECT_EQ(1, 2);   // 失败,但继续往下走
    ASSERT_EQ(1, 2);   // 失败,直接停止该测试
    EXPECT_TRUE(true); // 永远不会执行到这里
}

四、常见组合

1.    EXPECT_EQ / ASSERT_EQ —— 最常用
2.    EXPECT_TRUE / ASSERT_TRUE
3.    EXPECT_NEAR —— 浮点数比较
4.    EXPECT_THROW —— 异常检查

五、GTest断言速查表

类别EXPECT_* 宏ASSERT_* 宏说明
相等/不等EXPECT_EQ(val1, val2)ASSERT_EQ(val1, val2)判断相等
EXPECT_NE(val1, val2)ASSERT_NE(val1, val2)判断不相等
EXPECT_LT(val1, val2)ASSERT_LT(val1, val2)小于
EXPECT_LE(val1, val2)ASSERT_LE(val1, val2)小于等于
EXPECT_GT(val1, val2)ASSERT_GT(val1, val2)大于
EXPECT_GE(val1, val2)ASSERT_GE(val1, val2)大于等于
布尔EXPECT_TRUE(expr)ASSERT_TRUE(expr)断言表达式为真
EXPECT_FALSE(expr)ASSERT_FALSE(expr)断言表达式为假

字符串

(C 风格)

EXPECT_STREQ(str1, str2)ASSERT_STREQ(str1, str2)相等
EXPECT_STRNE(str1, str2)ASSERT_STRNE(str1, str2)不相等
EXPECT_STRCASEEQ(str1, str2)ASSERT_STRCASEEQ(str1, str2)忽略大小写相等
EXPECT_STRCASENE(str1, str2)ASSERT_STRCASENE(str1, str2)忽略大小写不相等
浮点数EXPECT_FLOAT_EQ(val1, val2)ASSERT_FLOAT_EQ(val1, val2)float 精确比较
EXPECT_DOUBLE_EQ(val1, val2)ASSERT_DOUBLE_EQ(val1, val2)double 精确比较
EXPECT_NEAR(val1, val2, tol)ASSERT_NEAR(val1, val2, tol)允许误差范围
异常EXPECT_THROW(stmt, ExType)ASSERT_THROW(stmt, ExType)抛出指定异常
EXPECT_ANY_THROW(stmt)ASSERT_ANY_THROW(stmt)抛出任意异常
EXPECT_NO_THROW(stmt)ASSERT_NO_THROW(stmt)不抛异常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值