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

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

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

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

  一、前言

  “深入解析”对我来说的确有些难度,所以我尽量将我学习到和观察到的gtest内部实现介绍给大家。本文算是抛砖引玉吧,只能是对gtest的整体结构的一些介绍,想要了解更多细节最好的办法还是看gtest源码,如果你看过gtest源码,你会发现里面的注释非常的详细!好了,下面就开始了解 gtest吧。

  二、从TEST宏开始

  前面的文章已经介绍过TEST宏的用法了,通过TEST宏,我们可以非法简单、方便的编写测试案例,比如:

TEST(FooTest, Demo)
{
    EXPECT_EQ(
11);
}

  我们先不去看TEST宏的定义,而是先使用/P参数将TEST展开。如果使用的是Vistual Studio的话:

  1. 选中需要展开的代码文件,右键 - 属性 - C/C++ - Preprocessor

  2. Generate Preprocessed File 设置 Without Line Numbers (/EP /P) 或 With Line Numbers (/P)

  3. 关闭属性对话框,右键选中需要展开的文件,右键菜单中点击:Compile

  编译过后,会在源代码目录生成一个后缀为.i的文件,比如我对上面的代码进行展开,展开后的内容为:

class FooTest_Demo_Test : public ::testing::Test 
{
public
    FooTest_Demo_Test() {}
private
    
virtual void TestBody();
    
static ::testing::TestInfo* const test_info_;
    FooTest_Demo_Test(
const FooTest_Demo_Test &);
    
void operator=(const FooTest_Demo_Test &);
};

::testing::TestInfo
* const FooTest_Demo_Test 
    ::test_info_ 
= 
        ::testing::
internal::MakeAndRegisterTestInfo( 
            
"FooTest""Demo""""",
            (::testing::
internal::GetTestTypeId()),
            ::testing::Test::SetUpTestCase,
            ::testing::Test::TearDownTestCase,
            
new ::testing::internal::TestFactoryImpl< FooTest_Demo_Test>);

void FooTest_Demo_Test::TestBody()
{
    
switch (0)
    
case 0:
        
if (const ::testing::AssertionResult 
                gtest_ar 
= 
                    (::testing::
internal:: EqHelper<(sizeof(::testing::internal::IsNullLiteralHelper(1)) == 1)>::Compare("1""1"11)))
            ;
        
else 
            ::testing::
internal::AssertHelper(
                ::testing::TPRT_NONFATAL_FAILURE,
                
".\\gtest_demo.cpp",
                
9,
                gtest_ar.failure_message()
                ) 
= ::testing::Message();
}

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

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号