玩转Google单元测试框架gtest系列之七:深入解析gtest

发表于:2010-4-12 14:54

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

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

  都是使用了GTEST_TEST_宏,在看看这个宏如何定义的:

#define GTEST_TEST_(test_case_name, test_name, parent_class, parent_id)\
class GTEST_TEST_CLASS_NAME_(test_case_name, test_name) : public parent_class {\
public:\
    GTEST_TEST_CLASS_NAME_(test_case_name, test_name)() {}\
private:\
    
virtual void TestBody();\
    
static ::testing::TestInfo* const test_info_;\
    GTEST_DISALLOW_COPY_AND_ASSIGN_(\
        GTEST_TEST_CLASS_NAME_(test_case_name, test_name));\
};\
\
::testing::TestInfo
* const GTEST_TEST_CLASS_NAME_(test_case_name, test_name)\
    ::test_info_ 
=\
        ::testing::
internal::MakeAndRegisterTestInfo(\
            #test_case_name, #test_name, 
"""", \
            (parent_id), \
            parent_class::SetUpTestCase, \
            parent_class::TearDownTestCase, \
            
new ::testing::internal::TestFactoryImpl<\
                GTEST_TEST_CLASS_NAME_(test_case_name, test_name)
>);\
void GTEST_TEST_CLASS_NAME_(test_case_name, test_name)::TestBody()

  不需要多解释了,和我们上面展开看到的差不多,不过这里比较明确的看到了,我们在TEST宏里写的就是TestBody里的东西。这里再补充说明一下里面的GTEST_DISALLOW_COPY_AND_ASSIGN_宏,我们上面的例子看出,这个宏展开后:

FooTest_Demo_Test(const FooTest_Demo_Test &);
void operator=(const FooTest_Demo_Test &);

  正如这个宏的名字一样,它是用于防止对对象进行拷贝和赋值操作的。

  四、再来了解RUN_ALL_TESTS宏

  我们的测试案例的运行就是通过这个宏发起的。RUN_ALL_TEST的定义非常简单:

#define RUN_ALL_TESTS()\
    (::testing::UnitTest::GetInstance()
->Run())

  我们又看到了熟悉的::testing::UnitTest::GetInstance(),看来案例的执行时从UnitTest的Run方法开始的,我提取了一些Run中的关键代码,如下:

int UnitTest::Run() {
    __try {
       
return impl_->RunAllTests();
    } __except(
internal::UnitTestOptions::GTestShouldProcessSEH(
        GetExceptionCode())) {
        printf(
"Exception thrown with code 0x%x.\nFAIL\n", GetExceptionCode());
        fflush(stdout);
       
return 1;
    }

   
return impl_->RunAllTests();
}

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号