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")
|
运行特定组的测试
语法
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_澄清】