Google Test 单元测试
gtest 断言/期望、TEST_F 夹具、参数化测试、Mock 模拟
Google Test 单元测试
Google Test 是 C++ 最流行的测试框架——丰富的断言、TEST_F 夹具、参数化测试。
学完本章你将: 掌握 gtest 断言/期望、TEST_F 夹具、参数化测试。
基本测试
cpp
#include <gtest/gtest.h>
int add(int a, int b) { return a + b; }
TEST(AddTest, PositiveNumbers) {
EXPECT_EQ(add(2, 3), 5);
EXPECT_GT(add(5, 5), 0); // > 0
}
TEST(AddTest, Zero) {
EXPECT_EQ(add(0, 0), 0);
EXPECT_EQ(add(0, 5), 5);
}
bash
g++ -std=c++17 test.cpp -lgtest -lgtest_main -pthread -o test
./test
TEST_F 夹具 —— 共享初始化
cpp
class DatabaseTest : public ::testing::Test {
protected:
void SetUp() override {
// 每个测试前执行
db = std::make_unique<Database>(":memory:");
db->initialize();
}
void TearDown() override { db.reset(); }
std::unique_ptr<Database> db;
};
TEST_F(DatabaseTest, InsertAndQuery) {
db->insert("key1", "value1");
EXPECT_EQ(db->query("key1"), "value1");
}
参数化测试
cpp
class AddParamTest : public ::testing::TestWithParam<std::tuple<int, int, int>> {};
TEST_P(AddParamTest, Works) {
auto [a, b, expected] = GetParam();
EXPECT_EQ(add(a, b), expected);
}
INSTANTIATE_TEST_SUITE_P(Values, AddParamTest, ::testing::Values(
std::tuple{2, 3, 5},
std::tuple{0, 0, 0},
std::tuple{-1, 1, 0}
));