gtest中如何跳出当前测试案例

发表于:2013-11-08 11:22

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

 作者:xiaogugood    来源:51Testing软件测试网采编

  在前面的玩转gtest - 断言中, 我们提到了ASSERT_*系列的断言只是在当前函数返回,并非退出当前测试案例,因为ASSERT_*系列是通过return来实现的(因此 ASSERT_*系列不能在返回值不为void的函数内出现)。要退出当前测试案例,一个最简单的方法就是通过抛异常,然后让gtest捕获这一异常。示例如下:
void Func(int a, int b)
{
throw "b==0";
EXPECT_EQ(0, a\b);
printf("End of Func");
}
TEST(FooTest, Demo1)
{
Func(5, 0);
printf("End Call Func(5, 0)");
}
int _tmain(int argc, _TCHAR* argv[])
{
testing::GTEST_FLAG(catch_exceptions) = 1;
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
  (上面的两个printf函数都不会执行。)
  要退出当前测试案例,你只需要两步:
  1.设置catch_exception标志,在main函数或是在你的测试案例前都可以。
  2.要跳出测试案例时,只需要通过throw抛出任意异常即可。
  为何通过这种方法可以跳出当前测试案例,请参考玩转gtest - 深入解析gtest。
  需要注意的是:假如使用的是TEST_F宏,跳出当前测试案例后,会执行TearDown(),因此不必当心TearDown中释放资源的操作不会执行。
  我认为一个好的测试案例,应该是在你的测试函数中,比如TEST宏内,清晰的表达出你要测试的对象,以及预期的测试结果。因此,通常情况下,EXPECT_*和 ASSERT_*应该尽量在测试函数中出现,而不是在测试函数内调用的另外函数或是里面很多层的函数内才出现。(比如上面的Func函数中的 EXPECT_EQ)。
相关文章
玩转Google单元测试框架gtest系列之二:断言
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号