求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
  
 
 
 
gtest中如何跳出当前测试案例
 

2010-08-05 作者:作者:CoderZh 来源:CoderZh的技术博客

 

在前面的玩转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(
50);
    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)。



LoadRunner性能测试基础
软件测试结果分析和质量报告
面向对象软件测试技术研究
设计测试用例的四条原则
功能测试中故障模型的建立
性能测试综述
更多...   


性能测试方法与技术
测试过程与团队管理
LoadRunner进行性能测试
WEB应用的软件测试
手机软件测试
白盒测试方法与技术


某博彩行业 数据库自动化测试
IT服务商 Web安全测试
IT服务商 自动化测试框架
海航股份 单元测试、重构
测试需求分析与测试用例分析
互联网web测试方法与实践
基于Selenium的Web自动化测试
更多...