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

在前面的 玩转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)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值