±à¼ÍƼö: |
±¾ÎÄÀ´×Ô²©¿ÍÔ°£¬±¾ÎÄÖ÷Òª¼òµ¥½éÉÜÁË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ÖÐʵÏÖ±ØÒªµÄͬ²½ÔÓï¡£ |