文章目录
- 概要
- 安装
- 实现机制-断言(简单、独立的测试)
- 实现机制-测试套件
- 实现机制-Test Fixture和事件
概要
官方文档
https://google.github.io/googletest/
安装
git clone https://github.com/google/googletest
cd googletest
mkdir build && cd build
cmake ..
make
make install
实现机制-断言(简单、独立的测试)
Gtest提供了一系列丰富的断言宏,用于验证测试结果。断言宏可以分为两类:ASSERT系列 EXPECT系列
- 如果ASSERT_XXX 测试不通过,后面的测试不会执行,测试直接终止
- 如果EXPECT_XXX 测试结果不通过,后面的测试会继续执行
_XXX后缀代表具体的检查类型
#include <iostream>
#include <gtest/gtest.h>
int add(int a, int b) {
return a + b;
}
int sub(int a, int b) {
return a - b;
}
// case1
TEST(testdemo1, c1) {
EXPECT_EQ(3, add(1, 2));
EXPECT_EQ(12, add(2, 6));
}
// case2
TEST(testdemo2, c2) {
EXPECT_EQ(-1, sub(1, 2));
}
GTEST_API_ int main(int argc, char ** argv) {
testing::InitGoogleTest(&argc, argv);
EXPECT_EQ(3, add(1, 2));
return RUN_ALL_TESTS();
}
运行结果:
实现机制-测试套件
为了方便的管理和组织多个测试用例,Gtest框架可以将测试用例组织称测试套件(Test Suite),并且可以嵌套多个。
Gtest将测试程序分为三个层级:
- test plan:对应一个单独的可执行程序,又一个入口main函数
- Test Suite:测试用例的集合
- Test Case:一个单独的测试函数或测试用例,是测试的最小单位
// case1
// test 为Test Suite的名称为test case的名称
TEST(test, c1) {
EXPECT_EQ(3, add(1, 2));
EXPECT_EQ(12, add(2, 6));
}
实现机制-Test Fixture和事件
我们希望在测试之间共享数据、对象,避免重复的设置和清理,做好代码测试的复用。Gtest提供了Test Fixture,能在测试前后统一做一些准备或清理操作。这些操作称为测试事件。
详细可以看 test fixture