gtest

google test (简称gtest) 是 google 开发的一个 c++单元测试框架,它能帮助开发者编写可移植、可维护的单元测试代码。

1、安装gtest

# 克隆仓库
git clone https://github.com/google/googletest.git
cd googletest
# 创建构建目录
mkdir build
cd build
# 生成构建文件
cmake ..
# 编译
make
# 安装(可能需要管理员权限)
sudo make install

 

2 Google Test基础语法

2.1 断言

Google Test提供了一系列的断言宏来检查条件是否满足。如果断言失败,测试用例被认为失败。断言分为两大类:ASSERT_* 和 EXPECT_*

  • ASSERT_* 版本在断言失败时会产生一个致命错误,并终止当前函数的执行。包括ASSERT_TRUE,ASSERT_FALSEASSERT_EQ
  • EXPECT_* 版本在断言失败时会产生一个非致命错误,当前函数会继续执行,这允许测试多个条件。包括EXPECT_TRUE,EXPECT_FALSEEXPECT_EQ

2.2 测试用例和测试套件

2.2.1 测试用例

测试用例(Test Case):是指一组相关测试的集合。在Google Test中,使用 TEST() 宏来定义一个不需要额外的设置或清理过程的简单测试用例。使用 TEST 时,只需提供测试案例名称和测试名称,然后编写测试代码块。案例如下

TEST(RbTreeTest, InsertTEST) {
  // 测试代码在这里
  EXPECT_EQ(1, 1); // 一个示例断言
}

其中TEST宏后的2个参数唯一标记了一个测试用例, 第一个参数可以重复, 但2个参数不能同时重复。
使用 TEST,每个测试是独立的,测试之间不共享任何状态。这个宏适合于无状态的测试,或者不需要为多个测试维护一个共同的环境时。

2.2.2 测试套件

测试套件(Test Suite):在更早的Google Test版本中,测试套件是指具有相同前缀的一组测试用例的集合。在新版本中,使用 TEST_F() 宏来定义测试套件,并且需要定义一个测试固件(Fixture)类。

TEST_F 宏在有一个测试固件时使用,测试固件是一种用来重用相同的设置和清理代码为多个测试服务的方法。测试固件通过一个从 ::testing::Test 派生的类来定义。然后,可以重写 SetUp 和 TearDown 方法来初始化和清理测试环境。

下面是一个使用 TEST_F 的例子:

// 定义测试固件
class MyTestFixture : public ::testing::Test {
protected:
  void SetUp() override {
    // 设置测试环境的代码
  }

  void TearDown() override {
    // 清理测试环境的代码
  }
};

// 使用 TEST_F 编写使用测试固件的测试
TEST_F(MyTestFixture, 测试名称) {
  // 可以使用设置好的环境的测试代码
  EXPECT_EQ(1, 1); // 一个示例断言
}

 

:使用 TEST_F,同一个固件内的每个测试按照它们定义的顺序运行,但Google Test确保每个测试是隔离的;也就是说,在每个测试之前,环境都会重置为通过 SetUp 建立的初始状态。这样,一个测试所做的改变不会影响到另一个测试。

posted @ 2025-04-17 18:00  hbg-rohens  阅读(119)  评论(0)    收藏  举报