gtest从
gtest从
1. 写
2. gtest基
2.1. 最
2.2. 各
2.3. gtest的
3. gtest主
3.1. 断
3.2. 参
化-测
3.2.1. 参
3.2.2. 案
3.3. 事
3.3.1. 事
3.3.2. 各
3.3.3. TestCase级
3.3.3.1. ⽰
3.3.4. TestSuite级
3.3.4.1. ⽰
3.3.5. 全
3.3.5.1. ⽰
3.3.6. 参
3.4. gtest的
3.4.1. *_DEATH(statement, regex`) 宏
3.4.2. *_EXIT(statement, predicate, regex`) 宏
3.4.3. *_DEBUG_DEATH
3.4.4. 死
3.4.5. 注
3.5. 运
数-测
3.5.1. 基
3.5.1.1. 命
3.5.1.2. 代
3.5.1.3. 系
3.5.1.4. 参
的FLAG
4. 项
4.1. 环
4.1.1. 编
4.2. 搭
架-项
5. 学
6. 基
6.1. TEST(test_case_name, test_name)
7. 参
1. 写
作, 它
量, 需
试, 为
题,只
分, 伴
题,才
起, 搅
们, 直
试ok不
量,但
不ok,确
零
到
项
⽬
使
⽤
零
到
项
⽬
使
⽤
在
最
前
础
基
本
的
认
知
种
概
念
常
⻅
函
数
和
命
令
要
模
块
内
容
讲
解
⾔
数
试
参
数
批
量
处
理
数
批
量
处
理
相
关
函
数
例
名
件
机
制
件
机
制
和
宏
之
间
的
关
系
机
制
之
间
的
关
系
别
事
件
例
别
事
件
例
局
事
件
例
考
死
亡
测
试
表
达
式
表
达
式
亡
测
试
的
运
⾏
⽅
式
意
事
项
⾏
参
试
的
可
执
⾏
程
序
的
运
⾏
参
数
本
介
绍
令
⾏
参
数
指
定
码
中
统
环
境
变
量
数
列
表
⽬
实
践
境
搭
建
译
建
⾃
⼰
的
测
试
框
⽬
级
参
考
习
⽰
例
础
函
数
考
连
接
在
最
前
质
量
⾸
先
属
于
开
发
问
题
,
⽽
不
是
测
试
问
有
开
发
解
决
不
了
的
质
量
问
是
测
试
的
问
题
测
试
并
不
是
⼀
个
独
⽴
的
⼯
是
开
发
⼯
作
的
⼀
部
随
着
整
个
开
发
过
程
质
量
不
等
于
测
了
质
要
你
把
开
发
⼯
作
和
测
试
结
合
到
⼀
拌
它
到
分
不
清
你
我
为
⽌
测
等
于
⾼
质
是
测
试
实
万
万
不
⾏
的
2. gtest基
2.1. 最
1. 使
⽤gtest编
1)
2)
,N是
3)
的Add函
2.2. 各
点 类
⾔,传
个TEST宏,会
2.3. gtest的
就……)
有N个
些log,
多“应
么”的
令,TEST宏
个TestCase
1. RUN_ALL_TESTS() 开
2. testing::InitGoogleTest(&argc, argv); 初
⼦:
1
2
3
4
5
int main(int argc, char** argv) {
testing::InitGoogleTest(&argc, argv);
testing::FLAGS_gtest_death_test_style = "fast";
return RUN_ALL_TESTS();
}
3. gtest主
3.1. 断
通
过
把
测
试
⼯
作
⼀
定
程
度
的
融
合
到
开
发
过
程
中
,
我
们
极
⼤
的
降
低
了
⼀
些
本
来
被
认
为
会
写
很
多
有
问
题
的
代
码
的
⼈
的
出
错
机
会
础
基
本
的
认
知
写
的
测
试
案
例
通
常
本
⾝
就
是
⼀
个
可
执
⾏
⽂
件
,
因
此
运
⾏
起
来
⾮
常
⽅
便
其
实
在
我
们
⼀
开
始
学
习
写
单
元
测
试
的
时
候
,
⽼
师
或
者
有
⼈
⽣
经
验
的
资
深
码
农
就
已
经
告
诉
了
我
们
写
单
元
测
试
的
⼀
些
原
则
:
测
试
⽤
例
能
验
证
函
数
的
正
确
性
(
这
条
都
通
不
过
;
测
试
⽤
例
尽
可
能
涵
盖
边
界
条
件
(
例
如
遍
历
⼀
个
链
表
,
头
指
针
是
空
,
只
有
⼀
个
节
点
,
链
表
节
点
问
题
描
述
下
允
许
的
最
⼤
节
点
数
等
等
)
;
⼀
些
异
常
和
错
误
处
理
(
例
如
往
⼀
个
函
数
⾥
传
⼊
空
指
针
,
传
⼊
空
串
,
这
个
函
数
能
否
打
印
⼀
返
回
错
误
码
,
实
现
加
法
数
如
何
检
测
和
处
理
溢
出
等
等
)
最
理
想
的
情
况
下
(
时
间
很
多
!
)
,
应
该
尽
量
多
写
测
试
⽤
例
,
以
保
证
代
码
功
能
的
正
确
性
符
合
预
期
,
具
有
良
好
的
容
错
性
。
如
果
代
码
较
复
杂
,
条
件
分
⽀
较
多
,
测
试
⽤
例
最
好
能
覆
盖
所
有
的
分
⽀
路
径
。
上
述
原
则
⼀
般
解
决
了
很
该
测
试
什
问
题
。
种
概
念
测
试
似
于
断
⼊
⼀
个
参
数
⼀
有
很
多
断
⾔
测
试
命
就
是
⼀
常
⻅
函
数
和
命
令
始
所
有
的
测
试
始
化
例
要
模
块
内
容
讲
解
⾔
3.2. 参
化-测
化,是
决,测
点,需
数,产
1
2
3
4
5
6
7
8
TEST(IsPrimeTest, HandleTrueReturn)
{
EXPECT_TRUE(IsPrime(3));
EXPECT_TRUE(IsPrime(5));
EXPECT_TRUE(IsPrime(11));
EXPECT_TRUE(IsPrime(23));
EXPECT_TRUE(IsPrime(17));
}
⽰,为
是1个
有5个
况,会
了4次
有50个
把5个
,100个
成5个
看gtest是
3.2.1. 参
1
INSTANTIATE_TEST_CASE_P(TrueReturn, IsPrimeParamTest, testing::Values(3, 5,
11, 23, 17))
TrueReturn 第
namespace吧
IsPrimeParamTest 第
IsPrimeParamTest
的 宏
testing::Values(3, 5, 11, 23, 17) 第
。Google提
取,⽤
容,可
为c++当
⽤test::Values
数
试
参
数
批
量
处
理
参
数
为
了
解
试
要
传
⼊
太
多
参
⽣
很
多
重
复
代
码
的
问
题
如
上
⾯
代
码
所
了
测
试
函
数
的
各
种
参
数
的
正
确
情
传
⼊
很
多
参
数
我
们
注
意
到
,
在
这
个
测
试
案
例
中
,
我
⾄
少
复
制
粘
贴
,
假
如
参
数
,
怎
么
办
?
同
时
,
上
⾯
的
写
法
产
⽣
的
测
试
案
例
,
⾥
⾯
检
查
点
,
假
如
我
要
检
查
变
单
独
的
案
例
,
将
会
更
加
累
⼈
。
接
下
来
,
就
来
看
如
何
为
我
们
解
决
这
些
问
题
的
数
批
量
处
理
相
关
函
数
⼀
个
参
数
是
测
试
案
例
的
前
缀
,
可
以
任
意
于
标
识
你
的
内
以
理
解
中
的
⼆
个
参
数
是
测
试
案
例
的
名
称
,
需
要
和
之
前
定
义
的
参
数
化
的
类
的
名
称
相
同
,
如
:
和
上
⾯
的
例
⼦
⾥
边
第
⼀
个
参
数
⼀
致
三
个
参
数
是
可
以
理
解
为
参
数
⽣
成
器
,
上
⾯
的
例
⼦
使
表
⽰
使
⽤
括
号
内
的
参
数
供
了
⼀
系
列
的
参
数
⽣
成
的
函
数
Range(begin, end[, step])
在begin~end之
为step,
括end
Values(v1, v2, ..., vN)
v1,v2到vN的
ValuesIn(container) and ValuesIn(begin,
end)
个C类
是STL容
Bool()
取 false 和 true 两
将g1,g2,...gN进
g1,g2,...gN本
g1,g2,..gN中
组(Tuple)
Combine(g1, g2, ..., gN)
3.2.2. 案
。 命
prefix/test_case_name.test.name/index
⾯INSTANTIATE_TEST_CASE_P 第
数,测
称,宏
prefix 就
test_case_name 测
3.3. 事
gtest提
TEST_F宏
。gtest的
承Test类
有3种
参
数
范
围
取
值
命
令
含
义
范
围
间
,
步
⻓
不
包
值
从
⼀
型
的
数
组
或
器
,
或
是
迭
代
器
中
取
值
个
值
这
个
⽐
较
强
悍
,
它
⾏
排
列
组
合
,
⾝
是
⼀
个
参
数
⽣
成
器
,
每
次
分
别
从
各
取
出
⼀
个
值
,
组
合
成
⼀
个
元
作
为
⼀
个
参
数
。
例
名
因
为
使
⽤
了
参
数
化
的
⽅
式
执
⾏
案
例
,
我
⾮
常
想
知
道
运
⾏
案
例
时
,
每
个
案
例
名
称
是
如
何
命
名
的
。
我
执
⾏
了
上
⾯
的
代
码
,
输
出
如
下
:
从
上
⾯
的
框
框
中
的
案
例
名
称
⼤
概
能
够
看
出
案
例
的
命
名
规
则
,
对
于
需
要
了
解
每
个
案
例
的
名
称
的
我
来
说
,
这
⾮
常
重
要
名
规
则
⼤
概
为
:
是
上
⼀
个
参
数
试
样
例
名
第
⼀
个
参
试
案
例
范
围
下
⾯
还
有
具
体
测
试
件
机
制
可
以
在
案
例
之
间
共
享
⼀
些
通
⽤
⽅
法
,
共
享
资
源
供
了
多
种
事
件
机
制
,
⾮
常
⽅
便
我
们
在
案
例
之
前
或
之
后
做
⼀
些
操
作
。
通
过
继
,
使
⽤
,
我
们
可
以
在
案
例
之
间
共
享
⼀
些
通
⽤
⽅
法
,
共
享
资
源
事
件
⼀
共
:
TestSuite级
TestCase级
3.3.1. 事
个TestCase前
道TEST(test_case_name,test_name)宏
,test_name理
是TestSuite级
个Test级
是test_name标
将test_case_name理
候test_case_name所
TestSuite级
TestCase 对
3.3.2. 各
试,例
3.3.3. TestCase级
现TestCase事
类testing::Test,
数SetUp() 和
TearDown(),SetUp()在
个TestCase执
⽽TearDown()在
个TestCase执
全
局
的
,
所
有
案
例
执
⾏
前
后
。
别
的
,
在
某
⼀
批
案
例
中
第
⼀
个
案
例
前
,
最
后
⼀
个
案
例
执
⾏
后
。
别
的
,
每
后
。
件
机
制
和
宏
之
间
的
关
系
我
们
知
函
数
有
两
个
参
数
,
这
⾥
可
以
解
为
⼀
个
⽬
录
解
为
这
个
⽬
录
下
的
众
多
⼦
⽬
录
,
在
执
⾏
测
试
的
时
标
识
的
就
别
的
,
⽽
每
⼀
别
的
就
识
的
测
试
别
类
似
于
⼀
个
测
试
的
类
应
于
每
⼀
次
的
测
如
⼀
次
断
⾔
测
试
机
制
之
间
的
关
系
别
事
件
实
件
,
需
要
实
现
⼀
个
类
并
继
承
⾃
在
该
类
内
含
有
两
个
函
每
⾏
之
前
会
执
⾏
,
每
⾏
之
后
会
进
⾏
解,就
隔case有
⽤gtest框
试STL中
的map这
的TEST()部
测find(),size()这
现,这
个TEST CASE⾥
中,那
了,
理,我
来,放
到SetUp() TearDown()这
3.3.3.1. ⽰
⼦,更
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
⾏SetUp()和TearDown()
个test_case执
//在
class TestMap:public testing::Test
{
public:
void SetUp()
{
cout<<"Setup()"< mp;
};
通
俗
的
讲
是
每
时
候
会
有
⼀
些
公
共
的
执
⾏
操
作
举
例
:
我
们
使
架
测
个
数
据
结
构
时
,
我
们
假
设
只
两
个
函
数
,
如
果
不
使
⽤
事
件
机
制
,
则
测
试
分
如
下
:
你
会
发
两
边
都
有
⼀
些
公
共
的
处
们
把
这
个
抽
取
出
种
框
架
虚
函
数
么
就
可
以
实
现
例
通
过
下
⾯
的
例
容
易
理
解
明
⽩
每
⼀
⾏
之
前
和
之
后
,
执
TearDown⽅
个TestCase执
了SetUp和
数SetUpTestCase() 和
3.3.4. TestSuite级
TestSuite级
TesrDownTestCase()。
SetUpTestCase() 在
TesrDownTestCase() 在
个TestCase执
个TestCase执
1
2
3
4
5
6
7
8
class MyMap:public testing::Test
{
public:
static void SetUpTestCase()
{}
static void TearDownTestCase()
{}
};
3.3.4.1. ⽰
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
个test之
⽤SetUpTestCase()和TearDownTestCase()
个test之
//在
class TestMap:public testing::Test
{
public:
static void SetUpTestCase()
{
cout<<"SetUpTestCase()"<
18
19
20
21
22
23
24
25
26
27
28
29
30
31
mp.insert(make_pair(1,1));
mp.insert(make_pair(2,1));
mp.insert(make_pair(3,1));
mp.insert(make_pair(4,1));
}
void TearDown()
{
mp.clear();
cout<<"TearDown()"< mp;
};
3.3.5. 全
testing::Environment。
SetUp()在
TearDown()在
现SetUp() 和 TearDown()两
1
2
3
4
5
6
7
8
class GlobalTest:public testing::Environment
{
public:
virtual void SetUp()
{}
virtual void TearDown()
{}
};
testing::AddGlobalTestEnvironment⽅
AddGlobalTestEnvironment()将
到main中
在main函
结
果
如
下
图
局
事
件
要
实
现
全
局
事
件
与
上
述
两
个
事
件
⼀
样
,
都
需
要
继
承
⼀
个
类
,
但
全
局
事
件
需
要
继
承
的
类
是
在
类
内
需
要
实
个
⽅
法
。
所
有
的
案
例
执
⾏
之
前
执
⾏
;
所
有
的
案
例
执
⾏
之
后
执
⾏
。
使
⽤
全
局
事
件
时
需
要
注
意
的
是
:
数
中
加
⼊
法
,
在
调
⽤
这
个
⽅
法
之
前
⽣
成
⼀
个
类
的
对
象
,
使
⽤
这
个
对
象
添
加
,
即
将
其
事
件
挂
接
上
去
。