??xml version="1.0" encoding="utf-8" standalone="yes"?>精品熟女少妇av免费久久,亚洲va国产va天堂va久久,久久综合香蕉国产蜜臀AVhttp://www.shnenglu.com/eXile/category/7018.htmlzh-cnThu, 28 Jan 2010 22:25:02 GMTThu, 28 Jan 2010 22:25:02 GMT60说说C++指针(2): 标准库中的智能指?/title><link>http://www.shnenglu.com/eXile/archive/2009/11/16/101062.html</link><dc:creator>eXile</dc:creator><author>eXile</author><pubDate>Mon, 16 Nov 2009 05:57:00 GMT</pubDate><guid>http://www.shnenglu.com/eXile/archive/2009/11/16/101062.html</guid><wfw:comment>http://www.shnenglu.com/eXile/comments/101062.html</wfw:comment><comments>http://www.shnenglu.com/eXile/archive/2009/11/16/101062.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/eXile/comments/commentRss/101062.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/eXile/services/trackbacks/101062.html</trackback:ping><description><![CDATA[ <p><span style="FONT-FAMILY: courier new; FONT-SIZE: 12pt">  <span style="FONT-FAMILY: Courier">使用指针是C++中常用的理内存的方式。关于智能指针的设计Q各路C++高手也是各展通?br><br>  ?994q? Greg Colvin向C++标准委员会提Z自己设计的智能指针:auto_ptr和counted_ptr。auto_ptr实现基本的RAII理Q不可复Ӟcounted_ptr采用引用计数实现了一个可复制的智能指针。两者用于不同的场合?br>  但是标准委员会最l只通过了auto_ptrQƈ且对auto_ptr加入了一个古怪的“所有权转移”语义。后来auto_ptr和counted_ptrq入了Boost C++ 库,改名为scoped_ptr和shared_ptr?br>  <br>  std::auto_ptr只所以设计ؓ可拷贝的Q也许是Z以下考虑Q比如下例函敎ͼ</span></span></p> <font size="4"> <div style="border-left-color: rgb(204, 204, 204); padding-bottom: 4px; background-color: rgb(238, 238, 238); padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; padding-top: 4px; "><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> f1(</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> ptr);<br></span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000"> f2();</span></div> </font><p><font size="4">  </font><span style="FONT-SIZE: 12pt"> f1中的参数所指向的对象应该由谁来删除呢?调用者还是被调用者?如果不看E序文档的话Q无法知道这一炏Vf2函数也存在同L问题?br><br>   用auto_ptr可以消除q种歧义性:</span></p> <font size="4"> <div style="border-left-color: rgb(204, 204, 204); padding-bottom: 4px; background-color: rgb(238, 238, 238); padding-left: 4px; width: 98%; padding-right: 5px; font-size: 13px; word-break: break-all; padding-top: 4px; "><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> f1(auto_ptr</span><span style="COLOR: #000000"><</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"> ptr);<br>auto_ptr</span><span style="COLOR: #000000"><</span><span style="COLOR: #0000ff">object</span><span style="COLOR: #000000">></span><span style="COLOR: #000000"> f2();</span></div> </font><p><font size="4">  <br></font>      <span style="FONT-FAMILY: courier new">管如此Qauto_ptr?#8220;所有权转移”语义q是会带来副作用Q因Z修改原值的帔R拯q背了一般的设计原则Q它也许会在你意想不到的情况下就把对象{UM。它也不能用于标准容器中?br>   所以auto_ptr在新的标准库已经不再推荐使用。取而代之的是unique_ptr。unique_ptr与auto_ptrcMQ但限制了auto_ptr的拷贝行为。同Ӟ像上面D的例子一Punique_ptr可以作ؓ函数的参数和q回g用。这是因为C++增加了一个新的特征:叛_引用?br><br>   shared_ptr也进入了标准库。对于引用计数的指针而言Q@环引用是一个大问题。标准库为此把shared_ptr定义为强引用指针Q它q实C一个弱引用指针weak_ptr。显Ӟ标准库ƈ没有从根本上解决循环引用的问题,它把q个问题交给了程序员。在一个简单的pȝ中,你可以区分用shared_ptr和weak_ptrQ以此来避免出现循环引用。但是在一个大的对象系l中Q有时还是容易出错。@环引用的问题Q严重减׃shared_ptr的可用性?br><br>   那么能不能自动检是否出现@环引用呢Q事实上Q对于shared_ptrq种使用非R入式{略实现的智能指针,是很隑֮现自动检的。但是如果采用R入式设计Q我们可以引入一些接口,来解册个问题。@环引用的,实际上是图论中的回\问题?br></span><br>      本文?a style="FONT-SIZE: 12pt" title="eXile" href="http://www.shnenglu.com/eXile/">eXile</a><span style="FONT-SIZE: 12pt"> 原创Q{载请表明原脓地址?nbsp;</span><a href="http://www.shnenglu.com/eXile/">http://www.shnenglu.com/eXile/</a>?/p><img src ="http://www.shnenglu.com/eXile/aggbug/101062.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/eXile/" target="_blank">eXile</a> 2009-11-16 13:57 <a href="http://www.shnenglu.com/eXile/archive/2009/11/16/101062.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>说说C++指针(1): 关于shared_ptrhttp://www.shnenglu.com/eXile/archive/2009/11/02/99995.htmleXileeXileMon, 02 Nov 2009 09:38:00 GMThttp://www.shnenglu.com/eXile/archive/2009/11/02/99995.htmlhttp://www.shnenglu.com/eXile/comments/99995.htmlhttp://www.shnenglu.com/eXile/archive/2009/11/02/99995.html#Feedback2http://www.shnenglu.com/eXile/comments/commentRss/99995.htmlhttp://www.shnenglu.com/eXile/services/trackbacks/99995.html   shared_ptr是新的标准库的一个主要成员,作ؓ一个非嵌入式的指针Q其设计可谓已经是绞脑汁。当Ӟq有很多人对它提Z不满。没有完的设计Q只有合适的设计?br>
1. shared_ptr最大的特点是接口的单性与实现的灵zL?br>    对于shared_ptr<Object>,object的内存管理是可定制的Q甚臛_以定制引用计数结点的内存分配Q以满对内存有Ҏ要求的情c而这一切,都被Object的实现者隐藏v来,使用Object的客L是不用关心的。这和以前标准库的组件实现策略有些不同。比如说, vector<int, A1>和vector<int, A2>Q由于内存分配策略的不同Q而变成类型的不同Q造成接口的改变?/span>q一点在shared_ptr的设计时被避免了Q当然以一定的性能代h。shared_ptr作ؓC++面向对象设计的一个重要组Ӟ接口的简单性是很重要的Q必要?/span>接口和实现的分离。与此相似的q有tr1::function的设计?br>
2.在同一体系中,各种cd的智能指针可以互相{换?br>
   如下例:

struct Object : InterfaceA, InterfaceB {
    MemberA memberA;
};


shared_ptr
<Object> obj(new Object);
shared_ptr
<InterfaceA> a = obj;
shared_ptr
<InterfaceB> b = obj;
shared_ptr<Object> p = static_pointer_cast<Object>(b);
shared_ptr<void> p2 = obj;


  甚至q可以取得数据成员的指针Q?br>
shared_ptr<Object> obj(new Object);
shared_ptr
<MemberA> memberA(obj, &obj->memberA);


  再来说说shared_ptr的缺炏V?br>

1.对于使用引用计数的智能指针来_必须要小心出现@环引用?br>     在重度?/span>shared_ptr的系l中Q你必须一开始就明确cMcȝ关系Q以军_哪里使用shared_ptrQ哪里?/span>weak_ptrQ否则就会出现内存泄霌Ӏ?span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium Simsun; WHITE-SPACE: normal; ORPHANS: 2; LETTER-SPACING: normal; COLOR: #000000; WORD-SPACING: 0px" class=Apple-style-span>shared_ptr的接?/span>转换的灵zL,也很ҎD指针被滥用?/span>内存自动理的问题ƈ没有得到解决Q它只是被{UM?br>
2.shared_ptr使用非嵌入式设计Q这样可以用于基本cdQ比?shared_ptr<int>。但是根据个人经验,q种情况在很用。大部分情况q是使用自己设计的类。这有一个问题,是没有很方便的办法实现this指针?/span>指针的{换。标准库中提供了enable_shared_from_thiscL解决q个问题。但q?/span>已经使所谓的非嵌入式设计徒有虚名。而假如一开始采?span style="WIDOWS: 2; TEXT-TRANSFORM: none; TEXT-INDENT: 0px; BORDER-COLLAPSE: separate; FONT: medium Simsun; WHITE-SPACE: normal; ORPHANS: 2; LETTER-SPACING: normal; COLOR: #000000; WORD-SPACING: 0px" class=Apple-style-span>嵌入式设计的话,则在性能代h和多U程设计斚wh更大的灵zL?/span>



eXile 2009-11-02 17:38 发表评论
]]>
最单的foreach实现(VC & GCC)http://www.shnenglu.com/eXile/archive/2009/05/08/82201.htmleXileeXileThu, 07 May 2009 17:25:00 GMThttp://www.shnenglu.com/eXile/archive/2009/05/08/82201.htmlhttp://www.shnenglu.com/eXile/comments/82201.htmlhttp://www.shnenglu.com/eXile/archive/2009/05/08/82201.html#Feedback10http://www.shnenglu.com/eXile/comments/commentRss/82201.htmlhttp://www.shnenglu.com/eXile/services/trackbacks/82201.html阅读全文

eXile 2009-05-08 01:25 发表评论
]]>
[T] 利用QTq行web与本地؜合应用开?http://www.shnenglu.com/eXile/archive/2009/03/09/75997.htmleXileeXileMon, 09 Mar 2009 08:41:00 GMThttp://www.shnenglu.com/eXile/archive/2009/03/09/75997.htmlhttp://www.shnenglu.com/eXile/comments/75997.htmlhttp://www.shnenglu.com/eXile/archive/2009/03/09/75997.html#Feedback6http://www.shnenglu.com/eXile/comments/commentRss/75997.htmlhttp://www.shnenglu.com/eXile/services/trackbacks/75997.html阅读全文

eXile 2009-03-09 16:41 发表评论
]]>
一个小疑问QC++头文件中的静态全局变量http://www.shnenglu.com/eXile/archive/2009/01/09/71567.htmleXileeXileFri, 09 Jan 2009 03:42:00 GMThttp://www.shnenglu.com/eXile/archive/2009/01/09/71567.htmlhttp://www.shnenglu.com/eXile/comments/71567.htmlhttp://www.shnenglu.com/eXile/archive/2009/01/09/71567.html#Feedback18http://www.shnenglu.com/eXile/comments/commentRss/71567.htmlhttp://www.shnenglu.com/eXile/services/trackbacks/71567.html   比如下面q个变量定义在一个头文g中:
static int data[1024*1024];
   我把q个文g同时包含在几个cpp文g中,按我的理解,q个E序占用的内存应该显著增大,但是Q从实际q行l果来看Qƈ没有变化Q生成的exe文g大小也没有变化,q是因ؓ延迟加蝲呢,q是被编译器优化掉了Q有没有明白的达释一下?br>



eXile 2009-01-09 11:42 发表评论
]]>
用ICE实现一个简单的聊天?/title><link>http://www.shnenglu.com/eXile/archive/2009/01/04/ice.html</link><dc:creator>eXile</dc:creator><author>eXile</author><pubDate>Sat, 03 Jan 2009 17:32:00 GMT</pubDate><guid>http://www.shnenglu.com/eXile/archive/2009/01/04/ice.html</guid><wfw:comment>http://www.shnenglu.com/eXile/comments/71099.html</wfw:comment><comments>http://www.shnenglu.com/eXile/archive/2009/01/04/ice.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.shnenglu.com/eXile/comments/commentRss/71099.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/eXile/services/trackbacks/71099.html</trackback:ping><description><![CDATA[     摘要: 聊天室是一U典型的|络应用Q这个程序演CZICE框架的基本结构?nbsp; <a href='http://www.shnenglu.com/eXile/archive/2009/01/04/ice.html'>阅读全文</a><img src ="http://www.shnenglu.com/eXile/aggbug/71099.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/eXile/" target="_blank">eXile</a> 2009-01-04 01:32 <a href="http://www.shnenglu.com/eXile/archive/2009/01/04/ice.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>利用scons~译Qt应用http://www.shnenglu.com/eXile/archive/2008/10/21/qt-cons.htmleXileeXileTue, 21 Oct 2008 15:48:00 GMThttp://www.shnenglu.com/eXile/archive/2008/10/21/qt-cons.htmlhttp://www.shnenglu.com/eXile/comments/64663.htmlhttp://www.shnenglu.com/eXile/archive/2008/10/21/qt-cons.html#Feedback1http://www.shnenglu.com/eXile/comments/commentRss/64663.htmlhttp://www.shnenglu.com/eXile/services/trackbacks/64663.html阅读全文

eXile 2008-10-21 23:48 发表评论
]]>
Google C++ Testing Framework Primer(zt)http://www.shnenglu.com/eXile/archive/2008/07/21/56738.htmleXileeXileMon, 21 Jul 2008 03:35:00 GMThttp://www.shnenglu.com/eXile/archive/2008/07/21/56738.htmlhttp://www.shnenglu.com/eXile/comments/56738.htmlhttp://www.shnenglu.com/eXile/archive/2008/07/21/56738.html#Feedback0http://www.shnenglu.com/eXile/comments/commentRss/56738.htmlhttp://www.shnenglu.com/eXile/services/trackbacks/56738.html

Google C++ Testing Framework Primer



译Q?a target="_blank">Ray Li (ray.leex@gmail.com)
修改日期Q?008q???br>原文参见Q?a >http://code.google.com/p/googletest/wiki/GoogleTestPrimer

译文地址Qhttp://www.javaeye.com/topic/212024

 

IntroductionQؓ什么需?/strong>Google C++ 试框架Q?/strong>

 

Google C++ 试框架帮助你更好地~写C++试?

 

无论你是在LinuxQWindowsQ还是Mac环境下工作,只要你编写C++代码Q?span class="hilite1">Google 试框架都可以帮上忙?

 

那么Q哪些因素才能构成一个好的测试?以及Q?span class="hilite1">Google C++ 试框架怎样满q些因素Q我们相信:

  1. 试应该?em>独立?em>可重?/em>的。因为其他测试成功或p|而导致我们要对自q试q行debug是非常痛苦的?span class="hilite1">Google C++ 试框架通过每个测试在不同的对象中q行Q得测试分d来。当一个测试失败时Q?span class="hilite1">Google C++ 试框架允许你独立运行它以进行快速除错?
  2. 试应该能够被很好地l织Qƈ反映被测代码的结构?span class="hilite1">Google C++ 试框架测试组l成试案例Q案例中的测试可以共享数据和E序分支。这样一U通用模式能够很容易L识,使得我们的测试容易维护。当开发h员在目之间转换Q开始在一个新的代码基上开始工作时Q这U一致性格外有用?
  3. 试应该?em>可移?/em>?em>可重?/em>的。开源社区有很多q_独立的代码,它们的测试也应该是^台独立的。除开一些特D情况,Google C++ 试框架q行在不同的操作pȝ上、与不同的编译器Qgcc、icc、MSVCQ搭配,Google C++ 试框架的测试很Ҏ与不同的配置一起工作?
  4. 当测试失败时Q应该提供尽可能多的、关于问题的信息?span class="hilite1">Google C++ 试框架在第一个测试失败时不会停下来。相反,它只是将当前试停止Q然后l接下来的测试。你也可以设|对一些非致命的错误进行报告,q接着q行当前的测试。这P你就可以在一?#8220;q行-~辑-~译”循环中检查到q修复多个bug?
  5. 试框架应该能将试~写人员从一些环境维护的工作中解攑և来,使他们能够集中精力于试?em>内容?span class="hilite1">Google C++ 试框架自动记录下所有定义好的测试,不需要用户通过列D来指明哪些测试需要运行?
  6. 试应该快?/em>。?span class="hilite1">Google C++ 试框架Q你可以重用多个试的共享资源,一ơ性完成设|?解除讄Q而不用一个测试去依赖另一试?/li>

因ؓGoogle C++ 试框架Z著名的xUnit架构Q如果你之前使用qJUnit或PyUnit的话Q你会感觉非常熟悉。如果你没有接触q这些测试框Ӟ它也只会占用你大U?0分钟的时间来学习基本概念和上手。所以,让我们开始吧Q?

 

NoteQ本文偶会?#8220;Google Test”来代?#8220;Google C++ 试框架”?

 

基本概念

 

使用Google TestӞ你是从编?em>断言开始的Q而断a是一些检查条件是否ؓ真的语句。一个断a的结果可能是成功、非致命p|Q或者致命失败。如果一个致命失败出玎ͼ他会l束当前的函敎ͼ否则Q程序l正常运行?

 

使用断言来验证被代码的行ؓ。如果一个测试崩溃或是出C个失败的断言Q那么,该测?em>p|Q否则该试成功?

 

一个测试案例(test caseQ包含了一个或多个试。你应该自q试分别归类到测试案例中Q以反映被测代码的结构。当试案例中的多个试需要共享通用对象和子E序Ӟ你可以把他们攑ֈ一个测试固Ӟtest fixtureQ类中?

 

一?em>试E序可以包含多个试案例?

 

从编写单个的断言开始,到创建测试和试案例Q我们将会介l怎样~写一个测试程序?

 

断言

 

Google Test中的断言是一些与函数调用怼的宏。要试一个类或函敎ͼ我们需要对其行为做出断a。当一个断ap|ӞGoogle Test会在屏幕上输代码所在的源文件及其所在的位置行号Q以及错误信息。也可以在编写断aӞ提供一个自定义的错误信息,q个信息在失败时会被附加?span class="hilite1">Google Test的错误信息之后?

 

断言常常成对出现Q它们都试同一个类或者函敎ͼ但对当前功能有着不同的效果。ASSERT_*版本的断ap|时会产生致命p|Qƈl束当前函数。EXPECT_*版本的断a产生非致命失败,而不会中止当前函数。通常更推荐用EXPECT_*断言Q因为它们运行一个测试中可以有不止一个的错误被报告出来。但如果在编写断a如果p|Q就没有必要l箋往下执行的试Ӟ你应该用ASSERT_*断言?

 

因ؓp|的ASSERT_*断言会立M当前的函数返回,可能会蟩q其后的一些的清洁代码Q这样也怼DI间泄漏。根据泄漏本w的特质Q这U情? 也许值得修复Q也可能不值得我们兛_——所以,如果你得到断a错误的同Ӟq得C一个堆查的错误Q记住上面我们所说的q一炏V?

 

要提供一个自定义的错误消息,只需要?lt;<操作W,或一?lt;<操作W的序列Q将其输入到框架定义的宏中。下面是一个例子:

 

 
  1. ASSERT_EQ(x.size(), y.size()) << "Vectors x and y are of unequal length";  
  2. for (int i = 0; i < x.size(); ++i) {  
  3.   EXPECT_EQ(x[i], y[i]) << "Vectors x and y differ at index " << i;  
  4. }  
 

M能够被输出到ostream中的信息都可以被输出C个断a宏中——特别是C字符串和string对象。如果一个宽字符? Qwchar_t*Qwindows上UNICODE模式TCHAR*或std::wstringQ被输出C个断a中,在打印时它会被{换成UTF-8 ~码?

 

基本断言

 

下面q些断言实现了基本的true/false条g试?

 

致命断言 非致命断a 验证条g
ASSERT_TRUE(condition); EXPECT_TRUE(condition); condition为真
ASSERT_FALSE(condition); EXPECT_FALSE(condition); condition 为假

 

CQ当它们p|ӞASSERT_*产生一个致命失败ƈ从当前函数返回,而EXCEPT_*产生一个非致命p|Q允许函数l运行。在两种情况下,一个断ap|都意味着它所包含的测试失败?

 

有效q_QLinux、Windows、Mac?

 

二进制比?/strong>

 

本节描述了比较两个值的一些断a?

 

致命断言 非致命断a 验证条g
ASSERT_EQ(expected, actual); EXPECT_EQ(expected, actual); expected == actual
ASSERT_NE(val1, val2); EXPECT_NE(val1, val2); val1 != val2
ASSERT_LT(val1, val2); EXPECT_LT(val1, val2); val1 < val2
ASSERT_LE(val1, val2); EXPECT_LE(val1, val2); val1 <= val2
ASSERT_GT(val1, val2); EXPECT_GT(val1, val2); val1 > val2
ASSERT_GE(val1, val2); EXPECT_GE(val1, val2); val1 >= val2

 

在出现失败事件时Q?span class="hilite1">Google Test会将两个|Val1?em>Val2Q都打印出来。在ASSERT_EQ*和EXCEPT_EQ*断言Q以及我们随后介l类似的断言Q中Q你应该把你希望试的表辑ּ攑֜actualQ实际|的位|上Q将其期望值放?em>expectedQ期望|的位|上Q因?span class="hilite1">Google Test的测试消息ؓq种惯例做了一些优化?

 

参数值必L可通过断言的比较操作符q行比较的,否则你会得到一个编译错误。参数D必须支持<<操作W来D入到ostream中。所有的C++内置cd都支持这一炏V?

 

q些断言可以用于用户自定义的型别Q但你必重载相应的比较操作W(?=?lt;{)。如果定义有相应的操作符Q推荐用ASSERT_*()宏,因ؓ它们不仅会输出比较的l果Q还会输Z个比较对象?

 

参数表达式L只被解析一ơ。因此,参数表达式有一定的副作用(side effectQ这里应该是指编译器不同Q操作符解析序的不定性)也是可以接受的。但是,同其他普通C/C++函数一P参数表达式的解析序是不定的(如,一U编译器可以自由选择一U顺序来q行解析Q,而你的代码不应该依赖于某U特定的参数解析序?

 

ASSERT_EQ()Ҏ针进行的是指针比较。即Q如果被用在两个C字符串上Q它会比较它们是否指向同L内存地址Q而不是它们所指向的字W串是否有相同倹{所以,如果你想对两个C字符Ԍ例如Qconst char*Q进行值比较,请用ASSERT_STREQ()宏,该宏会在后面介绍到。特别需要一提的是,要验证一个C字符串是否ؓI(NULLQ,使用ASSERT_STREQ(NULL, c_string)。但是要比较两个string对象Ӟ你应该用ASSERT_EQ?

 

本节中介l的宏都可以处理H字W串对象和宽字符串对象(string和wstringQ?

 

有效q_QLinux、Windows、Mac?

 

字符串比?/strong>

 

该组断言用于比较两个C字符丌Ӏ如果你惌比较两个string对象Q相应地使用EXPECT_EQ、EXPECT_NE{断a?

 

致命断言 非致命断a 验证条g
ASSERT_STREQ(expected_str, actual_str); EXPECT_STREQ(expected_str, actual_str); 两个C字符串有相同的内?/td>
ASSERT_STRNE(str1, str2); EXPECT_STRNE(str1, str2); 两个C字符串有不同的内?/td>
ASSERT_STRCASEEQ(expected_str, actual_str); EXPECT_STRCASEEQ(expected_str, actual_str); 两个C字符串有相同的内容,忽略大小?/td>
ASSERT_STRCASENE(str1, str2); EXPECT_STRCASENE(str1, str2); 两个C字符串有不同的内容,忽略大小?/td>

 

注意断言名称中出现的“CASE”意味着大小写被忽略了?

 

*STREQ*?STRNE*也接受宽字符Ԍwchar_t*Q。如果两个宽字符串比较失败,它们的g做ؓUTF-8H字W串被输出?

 

一个NULLI指针和一个空字符串会被认为是不一?/em>的?

 

有效q_QLinux、Windows、Mac?

 

参见Q更多的字符串比较的技巧(如子字符丌Ӏ前~和正则表辑ּ匚wQ,请参见[Advanced Guide Advanced Google Test Guide]?

 

单的试

 

要创Z个测试:

  1. 使用TESTQ)宏来定义和命名一个测试函敎ͼ它们是一些没有返回值的普通C++函数?
  2. 在这个函CQ与你想要包含的其它M有效C++代码一P使用Google Test提供的各U断a来进行检查?
  3. 试的结果由其中的断a军_Q如果测试中的Q意断ap|Q无论是致命q是非致命)Q或者测试崩溃,那么整个试失败了。否则,试通过?nbsp;
  1. TEST(test_case_name, test_name) {  
  2. ... test body ...  
  3. }  
 

TESTQ)的参数是从概括到Ҏ的?em>W一?/em>参数是测试案例的名称Q?em>W二?/em>参数是测试案例中的测试的名称。记住,一个测试案例可以包含Q意数量的独立试。一个测试的全称包括了包含它的测试案例名Uͼ及其独立的名U。不同测试案例中的独立测试可以有相同的名U?

 

举例来说Q让我们看一个简单的整数函数Q?

 

  1. int Factorial(int n); // q回n的阶?/span>