Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
Google C++µ¥Ôª²âÊÔ¿ò¼Ü---Gtest¿ò¼Ü¼ò½é
 
  3610  次浏览      27
 2019-5-7
 
±à¼­ÍƼö:

±¾ÎÄÀ´×Ô²©¿ÍÔ°£¬±¾ÎÄÖ÷Òª¼òµ¥½éÉÜÁËGoogle²âÊÔ»ù´¡ÖªÊ¶ÒÔ¼°±àдºÍÔËÐÐGoogle Test²âÊÔ£¬Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£

Ò»¡¢ÉèÖÃÒ»¸öеIJâÊÔÏîÄ¿

ÔÚÓÃgoogle testд²âÊÔÏîĿ֮ǰ£¬ÐèÒªÏȱàÒëgtestµ½library¿â²¢½«²âÊÔÓëÆäÁ´½Ó¡£ÎÒÃÇΪһЩÁ÷ÐеĹ¹½¨ÏµÍ³ÌṩÁ˹¹½¨Îļþ: msvc/ for Visual Studio, xcode/ for Mac Xcode, make/ for GNU make, codegear/ for Borland C++ Builder.

Èç¹ûÄãµÄ¹¹½¨ÏµÍ³²»ÔÚÕâ¸öÃûµ¥ÉÏ£¬ÔÚgoogletest¸ùĿ¼ÓÐautotoolsµÄ½Å±¾£¨²»ÍƼöʹÓ㩺ÍCMakeLists.txtCMake£¨ÍƼö£©¡£Äã¿ÉÒÔ¿´¿´make / MakefileÀ´Á˽âÈçºÎ±àÒëGoogle Test£¨»ù±¾ÉÏÄãÏëÔÚÍ·ÎļþÖÐʹÓÃGTEST_ROOTºÍGTEST_ROOT / includeÀ´±àÒësrc / gtest-all.cc·¾¶£¬ÆäÖÐGTEST_ROOTÊÇGoogle²âÊÔ¸ùĿ¼£©¡£

Ò»µ©ÄãÄܹ»±àÒëgoogle test¿â£¬ÄúÓ¦¸ÃΪÄúµÄ²âÊÔ³ÌÐò´´½¨Ò»¸öÏîÄ¿»ò¹¹½¨Ä¿±ê¡£Make sure you have GTEST_ROOT/include in the header search path so that the compiler can find "gtest/gtest.h" when compiling your test.°Ñgoogle test¿â¼Óµ½ÄãµÄ²âÊÔÏîÄ¿ÖУ¨±ÈÈ磺ÔÚVSÖÐÔÚgtest.vcprojÉÏÌí¼ÓÒÀÀµ£©¡£

¶þ¡¢»ù±¾¸ÅÄî

µ±Ê¹Óùȸè²âÊÔ£¬ÄúÊ×ÏÈҪд¶ÏÑÔ£¬¶ÏÑÔÊǼì²éÌõ¼þÊÇ·ñÎªÕæµÄÓï¾ä¡£Ò»¸ö¶ÏÑԵĽá¹û¿ÉÒÔÊdzɹ¦£¬·ÇÖÂÃüÐÔʧ°Ü£¬»òÖÂÃüµÄʧ°Ü¡£Èç¹ûÒ»¸öÖÂÃüʧ°Ü³öÏÖ£¬Ëü»áÖÕÖ¹µ±Ç°µÄº¯Êý£»·ñÔò³ÌÐò¼ÌÐøÕý³£ÔËÐС£

²âÊÔʹÓöÏÑÔÑéÖ¤´úÂëµÄÐÐΪ¡£Èç¹ûÒ»¸ö²âÊÔ±ÀÀ£»òÕßÓÐÒ»¸öʧ°ÜµÄ¶ÏÑÔ£¬ÄÇôʧ°Ü£»·ñÔò³É¹¦¡£

Ò»¸ö²âÊÔÓÃÀý°üº¬Ò»¸ö»ò¶à¸ö²âÊÔ¡£ ÄúÓ¦¸Ã½«²âÊÔ·Ö×éΪ·´Ó³²âÊÔ´úÂë½á¹¹µÄ²âÊÔÓÃÀý¡£µ±²âÊÔÓÃÀýÖеĶà¸ö²âÊÔÐèÒª¹²Ïí¹«¹²µÄ¶ÔÏóºÍ×Ó³ÌÐòʱ£¬Äã¿ÉÒÔ°ÑËüÃǷŽøÒ»¸ötest fixture class£¨²âÊԼоßÀࣩ¡£

Ò»¸ö²âÊÔ³ÌÐò¿ÉÒÔ°üº¬¶à¸ö²âÊÔÓÃÀý¡£

ÏÖÔÚÎÒÃǽ«½âÊÍÈçºÎ±àд²âÊÔ³ÌÐò£¬´Óµ¥¸ö¶ÏÑÔ¼¶±ð¿ªÊ¼£¬²¢¹¹½¨²âÊԺͲâÊÔÓÃÀý¡£

Èý¡¢¶ÏÑÔ

Google Test¶ÏÑÔÊÇÀàËÆÓÚº¯Êýµ÷ÓõĺꡣÄú¿ÉÒÔͨ¹ý¶ÔÆäÐÐΪ½øÐжÏÑÔÀ´²âÊÔÀà»òº¯Êý¡£µ±¶ÏÑÔʧ°Üʱ£¬Google Test»á´òÓ¡¶ÏÑÔµÄÔ´ÎļþºÍÐкÅλÖÃÒÔ¼°Ê§°ÜÏûÏ¢¡£Äú»¹¿ÉÒÔÌṩ×Ô¶¨Òåʧ°ÜÏûÏ¢£¬¸ÃÏûÏ¢½«¸½¼Óµ½Google²âÊÔµÄÐÅÏ¢ÖС£

¶ÏÑÔÊdzɶԵ쬲âÊÔͬһ¼þÊ£¬µ«¶Ôµ±Ç°º¯ÊýÓв»Í¬µÄÓ°Ïì¡£ ASSERT_ *°æ±¾ÔÚʧ°Üʱ»áÉú³ÉÖÂÃü´íÎ󣬲¢ÖÐÖ¹µ±Ç°º¯Êý¡£ EXPECT_ *°æ±¾Éú³É·ÇÖÂÃüÐÔ¹ÊÕÏ£¬²»»áÖÐÖ¹µ±Ç°º¯Êý¡£Í¨³£ÓÅÏÈʹÓÃEXPECT_ *£¬ÒòΪËüÃÇÔÊÐíÔÚ²âÊÔÖб¨¸æ¶à¸ö¹ÊÕÏ¡£µ«ÊÇ£¬Èç¹ûʧ°Üʱº¯Êý¼ÌÐøÔËÐÐûÓÐÒâÒ壬ÔòӦʹÓÃASSERT_ *¡£

ÒòΪʧ°ÜµÄASSERT_ *Á¢¼´´Óµ±Ç°º¯Êý·µ»Ø£¬¿ÉÄÜÌø¹ýÆäºóµÄÇåÀí´úÂ룬Ëü¿ÉÄܵ¼ÖÂ×ÊԴй©¡£¸ù¾Ýй©µÄÐÔÖÊ£¬Ëü¿ÉÄÜÖµµÃÐÞ¸´Ò²¿ÉÄܲ»ÖµµÃÐÞ¸´--ËùÒÔ°ÑÕâ¸ö¼ÇÔÚÐÄÀÈç¹ûÄãÓÐÒ»¸ö¶Ñ¼ì²â´íÎóÐèҪעÒâÊÇʲôµ¼Öµġ£

ÒªÌṩ×Ô¶¨Òåʧ°ÜÏûÏ¢£¬Ö»ÐèʹÓÃ<<ÔËËã·û»òһϵÁдËÀàÔËËã·û½«ÆäÁ÷ʽ´«Êäµ½ºêÖм´¿É¡£Ò»¸öÀý×Ó£º

ASSERT_EQ(x.size(), y.size()) << "Vectors x and y are of unequal length";

for (int i = 0; i < x.size(); ++i) {
EXPECT_EQ(x[i], y[i]) << "Vectors x and y differ at index " << i;
}

ʾÀý£º

EXPECT_EQ(0, strcmp(s.c_string(), kHelloString2)) << "s.c_string:" << s.c_string() << " kHelloString:" << +kHelloString ;

ÈκοÉÒÔÁ÷ʽ´«Êäµ½ostreamµÄ¶«Î÷¶¼¿ÉÒÔÁ÷ʽ´«Êäµ½¶ÏÑÔºê£¬ÌØ±ðÊÇC×Ö·û´®ºÍ×Ö·û´®¶ÔÏó¡£ Èç¹ûÒ»¸ö¿í×Ö·û´®£¨WindowsÉϵÄwchar_t *£¬TCHAR *ÔÚUNICODEģʽÏ£¬»òÕßstd :: wstring£©±»Á÷»¯µ½Ò»¸ö¶ÏÑÔ£¬µ±´òӡʱËü½«±»×ª»»ÎªUTF-8¡£

ËÄ¡¢»ù±¾¶ÏÑÔ

ÕâЩ¶ÏÑÔ×ö»ù±¾µÄÕæ/¼ÙÌõ¼þ²âÊÔ¡£

¼Çס£¬µ±ËüÃÇʧ°Üʱ£¬ASSERT_ *²úÉúÖÂÃüʧ°Ü²¢´Óµ±Ç°º¯Êý·µ»Ø£¬¶øEXPECT_ *²úÉú·ÇÖÂÃüʧ°Ü£¬ÔÊÐíº¯Êý¼ÌÐøÔËÐС£ ÔÚÈÎÒ»Çé¿öÏ£¬¶ÏÑÔʧ°ÜÒâζ×ÅÆä°üº¬µÄ²âÊÔʧ°Ü¡£

Îå¡¢¶þ½øÖƱȽÏ

±¾½Ú½éÉܱȽÏÁ½¸öÖµµÄ¶ÏÑÔ¡£

ÔÚ·¢Éú¹ÊÕÏʱ£¬Google²âÊÔͬʱ´òÓ¡val1ºÍval2¡£

Öµ²ÎÊýͨ¹ý¶ÏÑԵıȽÏÔËËã·û±ØÐë¿ÉÒԱȽϣ¬·ñÔò»á³öÏÖ±àÒë´íÎó¡£ÎÒÃÇÔø¾­ÒªÇó²ÎÊýÖ§³Ö<<ÔËËã·û£¬ÓÃÓÚÁ÷´«Êäµ½ostream£¬µ«´Óv1.6.0Ëü²»ÔÙÐèÒª£¨Èç¹ûÖ§³Ö<<£¬Ôò»áÔÚ¶ÏÑÔʧ°Üʱµ÷ÓÃËüÀ´´òÓ¡²ÎÊý;·ñÔòGoogle Test½«³¢ÊÔÒÔ×î¼Ñ·½Ê½´òÓ¡ËüÃÇ¡£Óйظü¶àÏêϸÐÅÏ¢ºÍÈçºÎ×Ô¶¨Òå²ÎÊýµÄ´òÓ¡£¬Çë²ÎÔÄ´ËGoogle Mock recipe.¡£

ÕâЩ¶ÏÑÔ¿ÉÒÔʹÓÃÓû§¶¨ÒåµÄÀàÐÍ£¬µ«ÊÇÖ»Óе±Ä㶨ÒåÁËÏàÓ¦µÄ±È½ÏÔËËã·û£¨ÀýÈç==£¬<£¬etc£©¡£Èç¹û¶¨ÒåÁËÏàÓ¦µÄ²Ù×÷·û£¬Ôò¸üϲ»¶Ê¹ÓÃASSERT _ *£¨£©ºê£¬ÒòΪËüÃDz»½ö»á´òÓ¡±È½Ï½á¹û£¬¶øÇÒ»¹»á´òÓ¡³öÁ½¸ö²Ù×÷Êý¡£

²ÎÊý×ÜÊÇÖ»¼ÆËãÒ»´Î¡£Òò´Ë£¬²ÎÊýÓи±×÷ÓÃû¹ØÏµ¡£È»¶ø£¬ÓëÈÎºÎÆÕͨµÄC / C ++º¯ÊýÒ»Ñù£¬²ÎÊýµÄÇóֵ˳ÐòÊÇ䶨ÒåµÄ£¨¼´±àÒëÆ÷¿ÉÒÔ×ÔÓÉÑ¡ÔñÈκÎ˳Ðò£©£¬ÄãµÄ´úÂë²»Ó¦¸ÃÒÀÀµÓÚÈκÎÌØ¶¨µÄ²ÎÊýÇóֵ˳Ðò¡£

ASSERT_EQ£¨£©Ö¸ÕëµÄÖ¸ÕëÏàµÈ¡£Èç¹ûÔÚÁ½¸öC×Ö·û´®ÉÏʹÓã¬Ëü»á²âÊÔËüÃÇÊÇ·ñÔÚͬһ¸öÄÚ´æÎ»Ö㬶ø²»ÊÇËüÃǾßÓÐÏàͬµÄÖµ¡£Òò´Ë£¬Èç¹ûÄãÏë±È½ÏC×Ö·û´®£¨ÀýÈçconst char *£©µÄÖµ£¬Ê¹ÓÃASSERT_STREQ£¨£©£¬ÉԺ󽫻áÃèÊö¡£ÌØ±ðµØ£¬Òª¶ÏÑÔC×Ö·û´®ÎªNULL£¬ÇëʹÓÃASSERT_STREQ£¨NULL£¬c_string£©¡£µ«ÊÇ£¬Òª±È½ÏÁ½¸ö×Ö·û´®¶ÔÏó£¬Ó¦¸ÃʹÓÃASSERT_EQ¡£

±¾½ÚÖеĺêÊÊÓÃÓÚÕ­ºÍ¿í×Ö·û´®¶ÔÏó£¨stringºÍwstring£©¡£

ÀúÊ·¼Ç¼£º2016Äê2ÔÂ֮ǰ* _EQÓÐÒ»¸öÔ¼¶¨£¬³ÆÎªASSERT_EQ£¨expected,actual£©£¬ËùÒԺܶàÏÖÓеĴúÂëʹÓÃÕâ¸ö˳Ðò¡£ ÏÖÔÚ* _EQÒÔÏàͬµÄ·½Ê½´¦ÀíÕâÁ½¸ö²ÎÊý¡£

Áù¡¢×Ö·û´®±È½Ï

¸Ã×éÖеĶÏÑԱȽÏÁ½¸öC×Ö·û´®µÄÖµ¡£ Èç¹ûÒª±È½ÏÁ½¸ö×Ö·û´®¶ÔÏó£¬Çë¸ÄÓÃEXPECT_EQ£¬EXPECT_NEºÍetc¡£

×¢Ò⣬¶ÏÑÔÃûÖеġ°CASE¡±±íʾºöÂÔ´óСд¡£

* STREQ *ºÍ* STRNE *Ò²½ÓÊÜ¿íC×Ö·û´®£¨wchar_t *£©¡£ Èç¹ûÁ½¸ö¿í×Ö·û´®µÄ±È½Ïʧ°Ü£¬ËüÃǵÄÖµ½«´òӡΪUTF-8Õ­×Ö·û´®¡£

NULLÖ¸ÕëºÍ¿Õ×Ö·û´®±»ÈÏΪÊDz»Í¬µÄ¡£

¿ÉÓÃÐÔ£ºLinux£¬Windows£¬Mac¡£

ÁíÇë²ÎÔÄ£ºÓйظü¶à×Ö·û´®±È½Ï¼¼ÇÉ£¨ÀýÈ磬×Ó×Ö·û´®£¬Ç°×º£¬ºó׺ºÍÕýÔò±í´ïʽƥÅ䣩£¬Çë²Î¼û¸ß¼¶Google²âÊÔÖ¸ÄÏ(Advanced Google Test Guide.)¡£

Æß¡¢¼òµ¥²âÊÔ

´´½¨²âÊÔ£º

1.ʹÓÃTEST£¨£©ºêÀ´¶¨ÒåºÍÃüÃû²âÊÔº¯Êý£¬ÕâЩÊDz»·µ»ØÖµµÄÆÕͨC++º¯Êý¡£

2.Ôڴ˺¯ÊýÖУ¬Á¬Í¬Òª°üÀ¨µÄÈκÎÓÐЧµÄC++Óï¾ä£¬Ê¹Óø÷ÖÖGoogle Test¶ÏÑÔÀ´¼ì²éÖµ¡£

3.²âÊԵĽá¹ûÓɶÏÑÔÈ·¶¨; Èç¹û²âÊÔÖеÄÈκζÏÑÔʧ°Ü£¨ÖÂÃü»ò·ÇÖÂÃü£©£¬»òÕßÈç¹û²âÊÔ±ÀÀ££¬Ôò Õû¸ö²âÊÔʧ°Ü¡£ ·ñÔò£¬Ëü³É¹¦¡£

TEST(test_case_name, test_name) {
... test body ...
}

TEST£¨£©²ÎÊý´ÓÒ»°ãµ½Ìض¨¡£ µÚÒ»¸ö²ÎÊýÊDzâÊÔÓÃÀýµÄÃû³Æ£¬µÚ¶þ¸ö²ÎÊýÊDzâÊÔÓÃÀýÖеIJâÊÔÃû³Æ¡£ ÕâÁ½¸öÃû³Æ±ØÐëÊÇÓÐЧµÄC ++±êʶ·û£¬²¢ÇÒËüÃDz»Ó¦°üº¬Ï»®Ïߣ¨_£©¡£ ²âÊÔµÄÈ«ÃûÓÉÆä°üº¬µÄ²âÊÔÓÃÀý¼°Æä¸öÈËÃû³Æ×é³É¡£À´×Ô²»Í¬²âÊÔÓÃÀýµÄ²âÊÔ¿ÉÒÔ¾ßÓÐÏàͬµÄ¸öÈËÃû³Æ¡£

ÀýÈ磬ÈÃÎÒÃÇʹÓÃÒ»¸ö¼òµ¥µÄÕûÊýº¯Êý£º

int Factorial(int n); // Returns the factorial of n£»n£¡

´Ëº¯ÊýµÄ²âÊÔÓÃÀý¿ÉÄÜÈçÏÂËùʾ£º

// Tests factorial of 0.
TEST(FactorialTest, HandlesZeroInput) {
EXPECT_EQ(1, Factorial(0));
}

// Tests factorial of positive numbers.
TEST(FactorialTest, HandlesPositiveInput) {
EXPECT_EQ(1, Factorial(1));
EXPECT_EQ(2, Factorial(2));
EXPECT_EQ(6, Factorial(3));
EXPECT_EQ(40320, Factorial(8));
}¡¡

Google Testͨ¹ý²âÊÔÓÃÀý¶Ô²âÊÔ½á¹û½øÐзÖ×飬Òò´ËÂß¼­Ïà¹ØµÄ²âÊÔÓ¦¸ÃÔÚͬһ²âÊÔÓÃÀýÖÐ; »»¾ä»°Ëµ£¬ËüÃǵÄTEST£¨£©µÄµÚÒ»¸ö²ÎÊýÓ¦¸ÃÊÇÏàͬµÄ¡£ ÔÚÉÏÃæµÄÀý×ÓÖУ¬ÎÒÃÇÓÐÁ½¸ö²âÊÔ£¬HandlesZeroInputºÍHandlesPositiveInput£¬ÊôÓÚͬһ¸ö²âÊÔÓÃÀýFactorialTest¡£

°Ë¡¢²âÊԼоß(Test Fixtures)£º¶Ô¶à¸ö²âÊÔʹÓÃÏàͬµÄÊý¾ÝÅäÖÃ

Èç¹ûÄã·¢ÏÖ×Ô¼ºÐ´ÁËÁ½¸ö»ò¸ü¶àµÄ²âÊÔÀ´²Ù×÷ÀàËÆµÄÊý¾Ý£¬Äã¿ÉÒÔʹÓòâÊԼоߡ£ËüÔÊÐíÄúΪ¼¸¸ö²»Í¬µÄ²âÊÔÖØ¸´Ê¹ÓÃÏàͬµÄ¶ÔÏóÅäÖá£

Òª´´½¨¼Ð¾ß£¬Ö»Ð裺

1.´Ó:: testing :: TestÅÉÉúÒ»¸öÀà¡£ ʹÓÃprotected£º»òpublic£º¿ªÊ¼ËüµÄÖ÷Ì壬ÒòΪÎÒÃÇÏë´Ó×ÓÀà ·ÃÎÊfixture³ÉÔ±¡£

2.ÔÚÀàÖУ¬ÉùÃ÷Äã´òËãʹÓõÄÈκζÔÏó¡£

3.Èç¹ûÐèÒª£¬¿ÉÒÔ±àдĬÈϹ¹Ô캯Êý»òSetUp£¨£©º¯ÊýÀ´ÎªÃ¿¸ö²âÊÔ×¼±¸¶ÔÏó¡£ Ò»¸ö³£¼ûµÄ´íÎóÊÇ Æ´Ð´SetUp£¨£©ÎªSetup£¨£©ÓëÒ»¸öСu -- ²»ÒªÈÃÕâÖÖÇé¿ö·¢ÉúÔÚÄãÉíÉÏ¡£

4.Èç¹ûÐèÒª£¬Ð´Ò»¸öÎö¹¹º¯Êý»òTearDown£¨£©º¯ÊýÀ´ÊÍ·ÅÄãÔÚSetUp£¨£©ÖзÖÅäµÄÈκÎ×ÊÔ´¡£ Òª ѧϰʲôʱºòÓ¦¸ÃʹÓù¹Ô캯Êý/Îö¹¹º¯Êý£¬µ±ÄãÓ¦¸ÃʹÓÃSetUp£¨£©/ TearDown£¨£©Ê±£¬ÇëÔĶÁÕâ¸ö FAQ entry.¡£

5.Èç¹ûÐèÒª£¬¶¨ÒåÒª·ÖÏíµÄ²âÊÔµÄ×Ó³ÌÐò¡£

µ±Ê¹Óüоßʱ£¬Ê¹ÓÃTEST_F£¨£©¶ø²»ÊÇTEST£¨£©£¬ÒòΪËüÔÊÐíÄú·ÃÎʲâÊԼоßÖеĶÔÏóºÍ×Ó³ÌÐò£º

TEST_F(test_case_name, test_name) {
... test body ...
}

ºÍTEST£¨£©Ò»Ñù£¬µÚÒ»¸ö²ÎÊýÊDzâÊÔÓÃÀýÃû£¬

µ«ÊǶÔÓÚTEST_F£¨£©µÚÒ»¸ö²ÎÊý±ØÐëÊDzâÊԼоßÀàµÄÃû³Æ¡£ Äã¿ÉÄܲµ½ÁË£º_FÊǼоߡ£

²»ÐÒµÄÊÇ£¬C ++ºêϵͳ²»ÔÊÐíÎÒÃÇ´´½¨Ò»¸ö¿ÉÒÔ´¦ÀíÁ½ÖÖÀàÐ͵IJâÊԵĺꡣ ʹÓôíÎóµÄºê»áµ¼Ö±àÒëÆ÷´íÎó¡£

ÁíÍ⣬ÔÚTEST_F£¨£©ÖÐʹÓÃËü֮ǰ£¬Äã±ØÐëÊ×Ïȶ¨ÒåÒ»¸ö²âÊԼоßÀ࣬·ñÔò½«µÃµ½±àÒëÆ÷´íÎó¡°virtual outside class declaration¡±¡£

¶ÔÓÚʹÓÃTEST_F£¨£©¶¨ÒåµÄÿ¸ö²âÊÔ£¬Google Test½«£º

1.ÔÚÔËÐÐʱ´´½¨Ò»¸öеIJâÊԼоß

2.Á¢¼´Í¨¹ýSetUp£¨£©³õʼ»¯£¬

3.ÔËÐвâÊÔ

4.ͨ¹ýµ÷ÓÃTearDown£¨£©Çå³ý

5.ɾ³ý²âÊԼоߡ£ Çë×¢Ò⣬ͬһ²âÊÔÓÃÀýÖеIJ»Í¬²âÊÔ¾ßÓв»Í¬µÄ²âÊԼо߶ÔÏó£¬Google²âÊÔʼ ÖÕ»áɾ³ý²âÊԼоߣ¬È»ºóÔÙ´´½¨ÏÂÒ»¸ö²âÊԼоߡ£ Google²âÊÔ²»»áΪ¶à¸ö²âÊÔÖØ¸´Ê¹ÓÃÏàͬµÄ ²âÊԼоߡ£Ò»¸ö²âÊԶԼоߵÄÈκθü¸Ä²»»áÓ°ÏìÆäËû²âÊÔ¡£

ÀýÈ磬ÈÃÎÒÃÇΪÃûΪQueueµÄFIFO¶ÓÁÐÀà±àд²âÊÔ£¬ËüÓÐÒÔϽӿڣº

template <typename E> // E is the element type.
class Queue {
public:
Queue();
void Enqueue(const E& element);
E* Dequeue(); // Returns NULL if the queue is empty.
size_t size() const;
...
};

Ê×Ïȶ¨ÒåÒ»¸ö¼Ð¾ßÀà¡£°´ÕÕ¹ßÀý£¬ÄãÓ¦¸Ã¸øËüÃû³ÆFooTest£¬ÆäÖÐFooÊDZ»²âÊÔµÄÀà¡£

class QueueTest : public ::testing::Test {
protected:
virtual void SetUp() {
q1_.Enqueue(1);
q2_.Enqueue(2);
q2_.Enqueue(3);
}

// virtual void TearDown() {}

Queue<int> q0_;
Queue<int> q1_;
Queue<int> q2_;
};

ÔÚÕâÖÖÇé¿öÏ£¬²»ÐèÒªTearDown£¨£©£¬ÒòΪÎÒÃDz»±ØÔÚÿ´Î²âÊÔºóÇåÀí£¬³ýÁËÎö¹¹º¯ÊýÒѾ­×öÁËʲô¡£

ÏÖÔÚÎÒÃǽ«Ê¹ÓÃTEST_F£¨£©ºÍÕâ¸ö¼Ð¾ß±àд²âÊÔ¡£

TEST_F(QueueTest, IsEmptyInitially) {
EXPECT_EQ(0, q0_.size());
}

TEST_F(QueueTest, DequeueWorks) {
int* n = q0_.Dequeue();
EXPECT_EQ(NULL, n);

n = q1_.Dequeue();
ASSERT_TRUE(n != NULL);
EXPECT_EQ(1, *n);
EXPECT_EQ(0, q1_.size());
delete n;

n = q2_.Dequeue();
ASSERT_TRUE(n != NULL);
EXPECT_EQ(2, *n);
EXPECT_EQ(1, q2_.size());
delete n;
}

ÉÏÃæÊ¹ÓÃASSERT_ *ºÍEXPECT_ *¶ÏÑÔ¡£ ¾­Ñé·¨Ôò( The rule of thumb )Êǵ±ÄãÏ£Íû²âÊÔÔÚ¶ÏÑÔʧ°Üºó¼ÌÐøÏÔʾ¸ü¶à´íÎóʱʹÓÃEXPECT_ *£¬»òÊÇÔÚʧ°Üºó¼ÌÐøÊ¹ÓÃASSERT_ *ûÓÐÒâÒå¡£ ÀýÈ磬Dequeue²âÊÔÖеĵڶþ¸ö¶ÏÑÔÊÇASSERT_TRUE£¨n£¡= NULL£©£¬ÒòΪÎÒÃÇÐèÒªÉÔºó½âÒýÓÃÖ¸Õën£¬Õ⽫µ¼ÖÂnΪNULLʱµÄsegfault¡£

µ±ÕâЩ²âÊÔÔËÐÐʱ£¬»á·¢ÉúÒÔÏÂÇé¿ö£º

1.Google Test¹¹ÔìÁËÒ»¸öQueueTest¶ÔÏó£¨ÎÒÃdzÆÖ®Îªt1£©¡£

2.t1.SetUp£¨£©³õʼ»¯t1¡£

3.µÚÒ»¸ö²âÊÔ£¨IsEmptyInitially£©ÔÚt1ÉÏÔËÐС£

4.t1.TearDown£¨£©ÔÚ²âÊÔÍê³ÉºóÇåÀí¡£

5.t1±»Îö¹¹¡£

6.ÒÔÉϲ½ÖèÔÚÁíÒ»¸öQueueTest¶ÔÏóÉÏÖØ¸´£¬Õâ´ÎÔËÐÐDequeueWorks²âÊÔ¡£

¾Å¡¢µ÷ÓòâÊÔ

TEST£¨£©ºÍTEST_F£¨£©ÓÃGoogle TestÒþʽע²áËûÃǵIJâÊÔ¡£ Òò´Ë£¬ÓëÐí¶àÆäËûC ++²âÊÔ¿ò¼Ü²»Í¬£¬Äú²»±ØÖØÐÂÁгöËùÓж¨ÒåµÄ²âÊÔÒÔÔËÐÐËüÃÇ¡£

¶¨Òå²âÊԺ󣬿ÉÒÔʹÓÃRUN_ALL_TESTS£¨£©ÔËÐÐËüÃÇ£¬Èç¹ûËùÓвâÊԳɹ¦Ôò·µ»Ø0£¬·ñÔò·µ»Ø1¡£ Çë×¢Ò⣬RUN_ALL_TESTS£¨£©ÔËÐÐÁ´½Óµ¥ÔªÖеÄËùÓвâÊÔ - ËüÃÇ¿ÉÒÔÀ´×Ô²»Í¬µÄ²âÊÔÓÃÀý£¬ÉõÖÁÊDz»Í¬µÄÔ´Îļþ¡£

µ÷ÓÃʱ£¬RUN_ALL_TESTS£¨£©ºê£º

1. ±£´æËùÓÐGoogle²âÊÔ±ê¼ÇµÄ״̬¡£

2. ΪµÚÒ»¸ö²âÊÔ´´½¨²âÊԼо߶ÔÏó¡£

3. ͨ¹ýSetUp£¨£©³õʼ»¯Ëü¡£

4. ÔÚfixture¶ÔÏóÉÏÔËÐвâÊÔ¡£

5. ͨ¹ýTearDown£¨£©Çå³ý¼Ð¾ß¡£

6. ɾ³ý¼Ð¾ß¡£

7. »Ö¸´ËùÓÐGoogle²âÊÔ±êÖ¾µÄ״̬¡£

8. ÖØ¸´ÉÏÊö²½Öè½øÐÐÏÂÒ»¸ö²âÊÔ£¬Ö±µ½ËùÓвâÊÔÔËÐнáÊø¡£

´ËÍ⣬Èç¹û²âÊԼоߵĹ¹Ô캯ÊýÔÚ²½Öè2ÖвúÉúÖÂÃü¹ÊÕÏ£¬Ôò²½Öè3-5ûÓÐÒâÒ壬Òò´ËËüÃDZ»Ìø¹ý¡£ ÀàËÆµØ£¬Èç¹û²½Öè3²úÉúÖÂÃü¹ÊÕÏ£¬Ôò½«Ìø¹ý²½Öè4¡£

ÖØÒª£ºÄú²»ÄܺöÂÔRUN_ALL_TESTS£¨£©µÄ·µ»ØÖµ£¬·ñÔògcc½«¸øÄúÒ»¸ö±àÒëÆ÷´íÎó¡£ ´ËÉè¼ÆµÄ»ù±¾Ô­ÀíÊÇ×Ô¶¯²âÊÔ·þÎñ»ùÓÚÆäÍ˳ö´úÂë¶ø²»ÊÇÆästdout / stderrÊä³öÀ´È·¶¨²âÊÔÊÇ·ñÒÑͨ¹ý; Òò´ËÄúµÄmain£¨£©º¯Êý±ØÐë·µ»ØRUN_ALL_TESTS£¨£©µÄÖµ¡£

´ËÍ⣬ÄúÓ¦¸ÃÖ»µ÷ÓÃÒ»´ÎRUN_ALL_TESTS£¨£©¡£ ¶à´Îµ÷ÓÃËü»áÓëһЩ¸ß¼¶Google²âÊÔ¹¦ÄÜ£¨ÀýÈçḬ̈߳²È«ËÀÍö²âÊÔ£©³åÍ»£¬Òò´Ë²»ÊÜÖ§³Ö¡£

Ê®¡¢Ð´Mainº¯Êý

Äã¿ÉÒÔ´ÓÕâ¸öÑù°å¿ªÊ¼£º

#include "this/package/foo.h"
#include "gtest/gtest.h"

namespace {
// The fixture for testing class Foo.
class FooTest : public ::testing::Test {
protected:
// You can remove any or all of the following functions if its body
// is empty.

FooTest() {
// You can do set-up work for each test here.
}

virtual ~FooTest() {
// You can do clean-up work that doesn't throw exceptions here.
}

// If the constructor and destructor are not enough for setting up
// and cleaning up each test, you can define the following methods:

virtual void SetUp() {
// Code here will be called immediately after the constructor (right
// before each test).
}

virtual void TearDown() {
// Code here will be called immediately after each test (right
// before the destructor).
}

// Objects declared here can be used by all tests in the test case for Foo.
};

// Tests that the Foo::Bar() method does Abc.
TEST_F(FooTest, MethodBarDoesAbc) {
const string input_filepath = "this/package/testdata/myinputfile.dat";
const string output_filepath = "this/package/testdata/myoutputfile.dat";
Foo f;
EXPECT_EQ(0, f.Bar(input_filepath, output_filepath));
}

// Tests that Foo does Xyz.
TEST_F(FooTest, DoesXyz) {
// Exercises the Xyz feature of Foo.
}

} // namespace

int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}

:: testing :: InitGoogleTest£¨£©º¯Êý½âÎöGoogle²âÊÔ±êÖ¾µÄÃüÁîÐУ¬²¢É¾³ýËùÓÐÒÑʶ±ðµÄ±êÖ¾¡£ ÕâÔÊÐíÓû§Í¨¹ý¸÷ÖÖ±êÖ¾¿ØÖƲâÊÔ³ÌÐòµÄÐÐΪ£¬ÎÒÃǽ«ÔÚAdvancedGuideÖнéÉÜ¡£ ÔÚµ÷ÓÃRUN_ALL_TESTS£¨£©Ö®Ç°±ØÐëµ÷Óô˺¯Êý£¬·ñÔò±êÖ¾½«ÎÞ·¨ÕýÈ·³õʼ»¯¡£

ÔÚWindowsÉÏ£¬InitGoogleTest£¨£©Ò²ÊÊÓÃÓÚ¿í×Ö·û´®£¬Òò´ËËüÒ²¿ÉÒÔÔÚÒÔUNICODEģʽ±àÒëµÄ³ÌÐòÖÐʹÓá£

µ«Ò²ÐíÄãÈÏΪ±àдËùÓÐÕâЩmain£¨£©º¯ÊýÊÇÌ«¶àµÄ¹¤×÷£¿ ÎÒÃÇÍêȫͬÒâÄãµÄ¿´·¨£¬Õâ¾ÍÊÇΪʲôGoogle TestÌṩÁËmain£¨£©µÄ»ù±¾ÊµÏÖ¡£ Èç¹ûËüÊʺÏÄãµÄÐèÒª£¬È»ºóÖ»ÊÇÁ´½ÓÄãµÄ²âÊÔÓëgtest_main¿â¡£

Ê® Ò»¡¢Visual C ++Óû§µÄÖØÒªËµÃ÷

Èç¹ûÄã°ÑÄãµÄ²âÊÔ·ÅÈëÒ»¸ö¿â£¬ÄãµÄmain£¨£©º¯ÊýÔÚ²»Í¬µÄ¿â»òÔÚÄãµÄ .exeÎļþÖУ¬ÕâЩ²âÊÔ½«²»»áÔËÐС£ Ô­ÒòÊÇVisual C ++ÖеÄÒ»¸ö´íÎó¡£ µ±Äú¶¨Òå²âÊÔʱ£¬Google²âÊԻᴴ½¨Ò»Ð©¾²Ì¬¶ÔÏóÀ´×¢²áËüÃÇ¡£ ÕâЩ¶ÔÏóûÓÐ´ÓÆäËûµØ·½ÒýÓ㬵«ËüÃǵĹ¹Ô캯ÊýÈÔȻӦ¸ÃÔËÐС£ µ±Visual C ++Á´½ÓÆ÷·¢ÏÖ¿âÖÐûÓÐ´ÓÆäËûµØ·½ÒýÓÃʱ£¬Ëü»áÅ׳ö¸Ã¿â¡£ Äú±ØÐëͨ¹ýÖ÷³ÌÐòÖеIJâÊÔÀ´ÒýÓÃÄúµÄ¿â£¬ÒÔ·ÀÖ¹Á´½ÓÆ÷¶ªÆúËü¡£ ÕâÀïÊÇÈçºÎ×öµ½µÄ¡£ ÔÚÄãµÄ¿â´úÂëÖÐÉùÃ÷Ò»¸öº¯Êý£º

¡£¡£¡£¡£¡£Ê¡ÂÔÀ²£¬Èç¹ûÓÃVCÔÙÀ´¿´¡£

Ê®¶þ¡¢´ÓÕâÀïµ½ÄÄÀïÈ¥

¹§Ï²£¡ ÄúÒÑѧϰÁËGoogle²âÊÔ»ù´¡ÖªÊ¶¡£ Äú¿ÉÒÔ¿ªÊ¼±àдºÍÔËÐÐGoogle Test²âÊÔ£¬ÔĶÁһЩʾÀý£¬»ò¼ÌÐøÔĶÁAdvancedGuide£¬ÆäÖнéÉÜÁ˸ü¶àÓÐÓõÄGoogle²âÊÔ¹¦ÄÜ¡£

Ê®Èý¡¢ÒÑÖªµÄÏÞÖÆ

Google²âÊÔÖ¼ÔÚḬ̈߳²È«¡£ ÔÚpthreads¿â¿ÉÓõÄϵͳÉÏ£¬ÊµÏÖÊÇḬ̈߳²È«µÄ¡£ Ŀǰ£¬ÔÚÆäËûϵͳ£¨ÀýÈçWindows£©ÉÏͬʱʹÓÃÁ½¸öÏ̵߳ÄGoogle Test¶ÏÑÔÊDz»°²È«µÄ¡£ ÔÚ´ó¶àÊý²âÊÔÖУ¬Õâ²»ÊÇÒ»¸öÎÊÌ⣬ÒòΪͨ³£¶ÏÑÔÊÇÔÚÖ÷Ïß³ÌÖÐÍê³ÉµÄ¡£ Èç¹ûÄãÏë°ïÖú£¬Äã¿ÉÒÔ־ԸΪÄúµÄƽ̨ÔÚgtest-port.hÖÐʵÏÖ±ØÒªµÄͬ²½Ô­Óï¡£

   
3610 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

΢·þÎñ²âÊÔÖ®µ¥Ôª²âÊÔ
һƪͼÎÄ´øÄãÁ˽â°×ºÐ²âÊÔÓÃÀýÉè¼Æ·½·¨
È«ÃæµÄÖÊÁ¿±£ÕÏÌåϵ֮»Ø¹é²âÊÔ²ßÂÔ
È˹¤ÖÇÄÜ×Ô¶¯»¯²âÊÔ̽Ë÷
Ïà¹ØÎĵµ

×Ô¶¯»¯½Ó¿Ú²âÊÔʵ¼ù֮·
jenkins³ÖÐø¼¯³É²âÊÔ
ÐÔÄܲâÊÔÕï¶Ï·ÖÎöÓëÓÅ»¯
ÐÔÄܲâÊÔʵÀý
Ïà¹Ø¿Î³Ì

³ÖÐø¼¯³É²âÊÔ×î¼Ñʵ¼ù
×Ô¶¯»¯²âÊÔÌåϵ½¨ÉèÓë×î¼Ñʵ¼ù
²âÊԼܹ¹µÄ¹¹½¨ÓëÓ¦ÓÃʵ¼ù
DevOpsʱ´úµÄ²âÊÔ¼¼ÊõÓë×î¼Ñʵ¼ù