Gtest

Gtest

知乎​[1] B站​[2]

1
2
3
4
5
6
7
8
9
10
11
$ tree -L 2
.
├── build
├── CMakeLists.txt
├── include
├── src
│ └── main.cpp
└── tests
└── test_main.cpp

4 directories, 3 files
1
cmake .. && make -j4 && ls

CMakeLists.txt

启用测试缓存

ctest 会自动缓存测试结果,如果测试未更改,则不会重新运行。

1
set_property(TEST MyTests PROPERTY WILL_FAIL FALSE)

并行测试

1
ctest -j4  # 使用 4 个线程并行运行测试

测试覆盖率

测试超时

1
2
# 设置测试超时时间为 10 秒
set_property(TEST MyTests PROPERTY TIMEOUT 10)

测试分组

为测试添加标签

1
2
# 为测试添加标签
set_property(TEST MyTests PROPERTY LABELS "unit_tests")

运行特定组的测试

1
ctest -L unit_tests

语法

assertion

ASSERT EXPECT Verifies
ASSERT_TRUE(condition); EXPECT_TRUE(condition); condition is true
ASSERT_FALSE(condition) EXPECT_FALSE(condition) condition is false
宏类型 ASSERT 宏 EXPECT 宏 条件
相等 ASSERT_EQ(val1, val2) EXPECT_EQ(val1, val2) val1 == val2
不等 ASSERT_NE(val1, val2) EXPECT_NE(val1, val2) val1 != val2
小于 ASSERT_LT(val1, val2) EXPECT_LT(val1, val2) val1 < val2
小于等于 ASSERT_LE(val1, val2) EXPECT_LE(val1, val2) val1 <= val2
大于 ASSERT_GT(val1, val2) EXPECT_GT(val1, val2) val1 > val2
大于等于 ASSERT_GE(val1, val2) EXPECT_GE(val1, val2) val1 >= val2

测试用例

1
2
3
4
TEST(MathUtilsTest, AddPositiveNumbers) {
EXPECT_EQ(add(1, 1), 2);
EXPECT_EQ(add(10, 20), 30);
}

TestSuiteName:测试套件的名称,通常是一个类或模块的名称。
TestName:测试用例的名称,描述具体的测试场景

测试夹具(TEST_F)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class MathUtilsTest : public ::testing::Test {
protected:
void SetUp() override {
// 在每个测试用例运行之前调用
}

void TearDown() override {
// 在每个测试用例运行之后调用
}
};

TEST_F(MathUtilsTest, AddPositiveNumbers) {
EXPECT_EQ(add(1, 1), 2);
EXPECT_EQ(add(10, 20), 30);
}

TEST_F(MathUtilsTest, AddNegativeNumbers) {
EXPECT_EQ(add(-1, -1), -2);
EXPECT_EQ(add(-10, -20), -30);
}

资源链接-Gtest

[1] 手把手教你使用gtest写单元测试

[2] 【从零搭建一个c/c++工程-gtest_ctest_澄清】


Gtest
http://example.com/post/gtest-z2gv4yl.html
作者
lovedreamms
发布于
2025年3月22日
许可协议