玩转Google单元测试框架gtest系列之五:死亡测试

发表于:2010-4-06 15:19

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:CoderZh    来源:www.cnblogs.com/coderzh

  五、*_DEBUG_DEATH

  先来看定义:

#ifdef NDEBUG

#define EXPECT_DEBUG_DEATH(statement, regex) \
  
do { statement; } while (false)

#define ASSERT_DEBUG_DEATH(statement, regex) \
  
do { statement; } while (false)

#else

#define EXPECT_DEBUG_DEATH(statement, regex) \
  EXPECT_DEATH(statement, regex)

#define ASSERT_DEBUG_DEATH(statement, regex) \
  ASSERT_DEATH(statement, regex)

#endif  // NDEBUG for EXPECT_DEBUG_DEATH

  可以看到,在Debug版和Release版本下, *_DEBUG_DEATH的定义不一样。因为很多异常只会在Debug版本下抛出,而在Realease版本下不会抛出,所以针对Debug和Release分别做了不同的处理。看gtest里自带的例子就明白了:

int DieInDebugElse12(int* sideeffect) {
    
if (sideeffect) *sideeffect = 12;
#ifndef NDEBUG
    GTEST_LOG_(FATAL, 
"debug death inside DieInDebugElse12()");
#endif  // NDEBUG
    
return 12;
}

TEST(TestCase, TestDieOr12WorksInDgbAndOpt)
{
    
int sideeffect = 0;
    
// Only asserts in dbg.
    EXPECT_DEBUG_DEATH(DieInDebugElse12(&sideeffect), "death");

    #ifdef NDEBUG
    
// opt-mode has sideeffect visible.
    EXPECT_EQ(12, sideeffect);
    
#else
    
// dbg-mode no visible sideeffect.
    EXPECT_EQ(0, sideeffect);
    
#endif
}

  六、关于正则表达式

  在POSIX系统(Linux, Cygwin, 和 Mac)中,gtest的死亡测试中使用的是POSIX风格的正则表达式,想了解POSIX风格表达式可参考:

  1. POSIX extended regular expression

  2. Wikipedia entry.

  在Windows系统中,gtest的死亡测试中使用的是gtest自己实现的简单的正则表达式语法。 相比POSIX风格,gtest的简单正则表达式少了很多内容,比如 ("x|y"), ("(xy)"), ("[xy]") 和("x{5,7}")都不支持。

42/4<1234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号