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();
}
{
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)。