测试死亡时间(Gtest:死亡测试)
作者:哪吒游戏网 来源:哪吒游戏网 2020-11-26 09:13:27
测试死亡时间(Gtest:死亡测试),哪吒游戏网给大家带来详细的测试死亡时间(Gtest:死亡测试)介绍,大家可以阅读一下,希望这篇测试死亡时间(Gtest:死亡测试)可以给你带来参考价值。
Gtest:死亡测试
转贴自:使用Google的开源C ++单元测试框架Google Test系列(gtest)第五次死亡测试
一、前言
“死亡测试”这个名字令人恐惧。这里的“死亡”是指程序的崩溃。通常在测试过程中,我们需要考虑各种输入。某些输入可能直接导致程序崩溃。这时,我们需要检查程序是否以预期的方式挂起。这就是所谓的“死亡测试”。 gtest的死亡测试可以在安全的环境中执行崩溃测试用例,同时验证崩溃结果。
二、使用的宏
致命断言
非致命断言
验证
ASSERT_DEATH(声明,正则表达式);
EXPECT_DEATH(statement,regex`);
语句因给定的错误而崩溃
ASSERT_EXIT(语句,谓词,正则表达式);
EXPECT_EXIT(语句,谓词,正则表达式);
语句以给定的错误退出,并且退出代码与谓词相符
由于某些异常仅在Debug下引发测试死亡时间,因此还提供了* _DEBUG_DEATH来处理Debug和Realease之间的差异。
三、* _ DEATH(语句,正则表达式)
1.语句是要测试的代码语句
2.regex是一个正则表达式,用于在发生异常时匹配stderr中输出的内容
如以下示例:

voidFoo()
{
int * pInt = 0;
* pInt = 42;
}
TEST(FooDeathTest,Demo)
{
EXPECT_DEATH(Foo(),“”);
}

重要:在编写死亡测试用例时,请对TEST的第一个参数testcase_name使用DeathTest后缀。原因是gtest将优先考虑运行死测试用例,这应该是出于线程安全考虑。
四、* _ EXIT(语句,谓词,正则表达式)
1.语句是要测试的代码语句
2.谓词在这里必须是一个委托,接收一个int参数并返回一个布尔值。仅当返回值为true时,死亡测试用例才能通过。 gtest提供了一些常用谓词:
testing :: ExitedWithCode(exit_code)
如果程序正常退出,并且退出代码与exit_code相同,则返回true
testing :: KilledBySignal(signal_number)// Windows不支持
如果程序被signal_number信号杀死,则返回true
3.regex是一个正则表达式,用于在发生异常时匹配stderr中输出的内容
在这里,应该注意* _DEATH实际上是* _EXIT的程序包,而* _DEATH的谓词确定该进程是使用非零退出代码退出还是被信号杀死。
示例:
TEST(ExitDeathTest,Demo)
{
EXPECT_EXIT(_exit(1),testing :: ExitedWithCode(1),“”);
}
五、* _ DEBUG_DEATH
首先查看定义:

#ifdefNDEBUG
#defineEXPECT_DEBUG_DEATH(语句,正则表达式)\
do {statement;} while(false)
#defineASSERT_DEBUG_DEATH(语句,正则表达式)\
do {statement;} while(false)
#else
#defineEXPECT_DEBUG_DEATH(语句,正则表达式)\
EXPECT_DEATH(语句,正则表达式)
#defineASSERT_DEBUG_DEATH(语句,正则表达式)\
ASSERT_DEATH(语句,正则表达式)
#endif // NDEBUGforEXPECT_DEBUG_DEATH

如您所见,* _ DEBUG_DEATH的定义在Debug版本和Release版本中有所不同。由于仅在Debug版本中引发了许多异常,而在Realease版本中未引发,因此分别对Debug和Release进行了不同的处理。查看gtest随附的示例以了解:

intDieInDebugElse12(int * sideeffect){
if(sideeffect)* sideeffect = 12;
#ifndefNDEBUG
GTEST_LOG_(FATAL,“ debugdeathinsideDieInDebugElse12()”);
#endif // NDEBUG
return12;
}
TEST(TestCase,TestDieOr12WorksInDgbAndOpt)
{
intsideeffect = 0;
// Onlyassertsindbg。
EXPECT_DEBUG_DEATH(DieInDebugElse12(&sideeffect),“死亡”);
#ifdefNDEBUG
// opt-mode有副作用。
EXPECT_EQ(12,sideeffect);
#else
// dbg-modenovisible副作用。
EXPECT_EQ(0,sideeffect);
#endif
}

六、关于正则表达式
在POSIX系统(Linux,Cygwin和Mac)中,POSIX样式的正则表达式用于gtest的死亡测试。如果您想了解POSIX样式的表达式,请参阅:
1.
2.。
在Windows系统中,gtest的死亡测试使用由gtest本身实现的简单正则表达式语法。与POSIX样式相比,gtest的简单正则表达式的内容要少得多,例如(“ x | y”),(“(xy)”),(“ [xy]”)和(“ x {5,7}” )不受支持。
以下是一些简单正则表达式支持的内容:
与任何文字字符匹配
\\ d
匹配任何十进制数字
\\ D
匹配所有非十进制数字的字符
\\ f
匹配\ f
\\ n
匹配项\ n
\\ r
匹配项\ r
\\ s
匹配任何ASCII空格,包括\ n
\\ S
匹配所有非空格字符
\\ t
匹配\ t
\\ v
匹配\ v
\\ w
匹配任何字母,_或十进制数字
\\ W
匹配\\ w不匹配的任何字符
\\ c
匹配任何文字字符,必须为标点符号
。
匹配除\ n
以外的任何单个字符
匹配0或1次出现的A
A *
匹配0或多次出现的A
A +
匹配1个或多次出现的A
^
匹配字符串的开头(而不是每一行的开头)
$
匹配字符串的末尾(而不是每一行的末尾)
xy
matchesx跟着byy
gtest定义了两个宏,以指示当前系统支持哪些正则表达式样式集:
1. POSIX样式:GTEST_USES_POSIX_RE = 1
2.简单样式:GTEST_USES_SIMPLE_RE = 1
七、死亡测试操作模式
1.快速模式(默认模式)
testing :: FLAGS_gtest_death_test_style =“ fast”;
2.线程安全方法
testing :: FLAGS_gtest_death_test_style =“ threadsafe”;
您可以在main()中为所有死亡测试设置测试格式,也可以为特定测试单独设置测试格式。 Google测试会在每次测试之前保存该标记,并在测试完成后将其还原,因此您无需担心这部分工作。如:

TEST(MyDeathTest,TestOne){
testing :: FLAGS_gtest_death_test_style =“ threadsafe”;
//此测试以“线程安全”样式运行:
ASSERT_DEATH(ThisShouldDie(),“”);
}
TEST(MyDeathTest,TestTwo){
//此测试以“快速”样式运行:
ASSERT_DEATH(ThisShouldDie(),“”);
}
intmain(intargc,char ** argv){
testing ::: InitGoogleTest(&argc,argv);
testing :: FLAGS_gtest_death_test_style =“ fast”;
returnRUN_ALL_TESTS();
}

八、注释
1.不要在死亡测试中释放记忆。
2.在父进程中再次释放内存。
3.不要在程序中使用内存堆检查。
九、摘要
关于死亡测试,官方的gtest文档非常详细,并且在源代码中也有很多示例。如果您想了解更多信息,请参考官方文档,或直接查看gtest源代码。
简单来说,通过* _DEATH(statement,regex`)和* _EXIT(statement,predicate,regex`),我们可以轻松编写导致崩溃的测试用例测试死亡时间,而又不影响其他用例的执行。崩溃的情况。
总结:以上内容就是针对测试死亡时间(Gtest:死亡测试)详细阐释,如果您觉得有更好的建议可以提供给哪吒游戏网小编,测试死亡时间(Gtest:死亡测试)部分内容转载自互联网,有帮助可以收藏一下。
上一篇: 测试死亡时间(倒计时软件测试死亡时间)
- 1 魔兽世界 考古(魔兽世界考古毁一生?这些装备幻化和坐骑值得你去玩考古)
- 2 普罗霍洛夫(卢布危机下俄土豪大甩卖 卖完豪宅卖球队)
- 3 龙之谷手柄(《龙之谷手游》手柄怎么连接 柄连接教学攻略)
- 4 普罗霍洛夫(俄罗斯土豪准备20亿抛售篮网! 最烂老板是怎样炼成的?)
- 5 天联网(天联网信息科技有限公司怎么样?)
- 6 附魔大师(魔兽世界怀旧服附魔大师在哪 附魔大师位置分享介绍)
- 7 wow烹饪食谱(魔兽世界怀旧服烹饪极品食谱)
- 8 陶谦让徐州(陶谦三让徐州,世界上真有这样的好人吗?)
- 9 lol神圣之剑(LOL如果神圣之剑回归,谁最受益?第1:只要不瞎都能上钻石!)
- 10 陶谦让徐州(陶谦三让徐州的原因是什么?)
- 魔兽世界 考古(魔兽世界考古毁一生?这些装备幻化和坐骑值得你去玩考古)
- 龙之谷手柄(《龙之谷手游》手柄怎么连接 柄连接教学攻略)
- 绝地求生国服绑定(《绝地求生》绑定国服不会对steam账号有任何影响)
- 绝地求生国服绑定(国服吃鸡不要钱!《绝地求生》QQ绑定Steam详细教程)
- 五指山在哪里(现实中真正的五指山,被称为沙漠之手,你知道在哪里吗?)
- 伊邪那岐(伊邪那岐与伊邪那美的形象解读)
- 五指山在哪里(五指山在哪里 五指山有什么特色玩法)
- 伊邪那岐(【分析】伊邪那岐和伊邪那美的漏洞设定)
- 伊邪那岐(阴阳师伊邪那岐原画一览 伊邪那岐高清图片欣赏)
- 天命奇御(天命奇御|正版购买|凤凰游戏|FHYX.com)

机械战警
坦克射击
梦道满V版
火箭精英3d免费版
太古灵诀
小小帝国无敌破解版
厉害了我的娃
乐高无限
侠影双剑九游版