嫻嬭瘯鏄蔣浠跺紑鍙戣繃紼嬩腑鏋佸叾閲嶈鐨勪竴鐜紝璇﹀敖鍛ㄥ瘑鐨勬祴璇曡兘澶熷噺灝戣蔣浠禕UG錛屾彁楂樿蔣浠跺搧璐ㄣ傛祴璇曞寘鎷崟鍏冩祴璇曘佺郴緇熸祴璇曠瓑銆傚叾涓崟鍏冩祴璇曟槸鎸囬拡瀵硅蔣浠跺姛鑳藉崟鍏冩墍浣滅殑嫻嬭瘯錛岃繖閲岀殑鍔熻兘鍗曞厓鍙互鏄竴涓被鐨勫睘鎬ф垨鑰呮柟娉曪紝嫻嬭瘯鐨勭洰鐨勬槸鐪嬭繖浜涘熀鏈崟鍏冩槸鍚﹀伐浣滄甯搞傜敱浜庡崟鍏冩祴璇曠殑鍐呭寰堝熀紜錛屽洜姝ゅ彲浠ョ湅浣滄槸嫻嬭瘯宸ヤ綔鐨勭涓鐜紝璇ラ」宸ヤ綔涓鑸敱寮鍙戜漢鍛樿嚜琛屽畬鎴愩傚鏋滄潯浠跺厑璁革紝鍗曞厓嫻嬭瘯浠g爜鐨勫紑鍙戝簲涓庣▼搴忎唬鐮佺殑寮鍙戝悓姝ヨ繘琛屻?/p>
铏界劧涓嶅悓紼嬪簭鐨勫崟鍏冩祴璇曚唬鐮佷笉灝界浉鍚岋紝浣嗘祴璇曚唬鐮佺殑妗嗘灦鍗撮潪甯哥浉浼鹼紝浜庢槸渚垮嚭鐜頒簡涓浜涘崟鍏冩祴璇曠被搴擄紝CppUnit渚挎槸鍏朵腑涔嬩竴銆?/p>
CppUnit鏄疿Unit涓殑涓鍛橈紝XUnit鏄竴涓ぇ瀹舵棌錛岃繕鍖呮嫭JUnit鍜孭ythonUnit絳夈侰ppUnit綆鍗曞疄鐢紝瀛︿範鍜屼嬌鐢ㄨ搗鏉ラ兘寰堟柟渚匡紝緗戜笂宸叉湁涓浜涙枃绔犲鍏朵綔浠嬬粛錛屼絾鏈枃鏇寸潃閲嶄簬璁茶В鍏朵腑鐨勫熀鏈蹇靛拰浣跨敤鏂規硶錛屼互甯姪鍒濇鎺ヨЕCppUnit鐨勪漢鍛樺揩閫熷叆闂ㄣ?/p>
瀹夎
鐩墠錛孋ppUnit鐨勬渶鏂扮増鏈槸1.10.2錛屼綘鍙互浠庝笅闈㈠湴鍧鑾峰彇錛?/p>http://sourceforge.net/projects/cppunit
瑙e帇鍚庯紝浣犲彲浠ョ湅鍒癈ppUnit鍖呭惈濡備笅鐩綍錛?/p>
config錛?閰嶇疆鏂囦歡 contrib錛?contribution錛屽叾浠栦漢璐$尞鐨勫鍥翠唬鐮?doc錛?鏂囨。錛岄渶瑕侀氳繃doxygen宸ュ叿鐢熸垚錛屼篃鍙互鐩存帴浠巗ourceforge绔欑偣涓婁笅杞芥墦鍖呭ソ鐨勬枃妗?examples錛氱ず渚嬩唬鐮?include錛?澶存枃浠?lib錛?瀛樻斁緙栬瘧濂界殑搴?src錛?婧愭枃浠訛紝浠ュ強緙栬瘧搴撶殑宸ョ▼絳?/pre>鐒跺悗鎵撳紑src鐩綍涓嬬殑CppUnitLibraries宸ョ▼錛屾墽琛宐uild/batch build錛岀紪璇戞垚鍔熺殑璇濓紝鐢熸垚鐨勫簱鏂囦歡灝嗚鎷瘋礉鍒發ib鐩綍涓嬨?/p>
浣犱篃鍙互鏍規嵁闇瑕侀夋嫨鎵闇鐨勯」鐩繘琛岀紪璇戯紝鍏朵腑欏圭洰cppunit涓洪潤鎬佸簱錛宑ppunit_dll涓哄姩鎬佸簱錛岀敓鎴愮殑搴撴枃浠朵負錛?/p>
cppunit.lib錛?闈欐佸簱release鐗?cppunitd.lib錛?闈欐佸簱debug鐗?cppunit_dll.lib錛?鍔ㄦ佸簱release鐗?cppunitd_dll.lib錛氬姩鎬佸簱debug鐗?/pre>瑕佷嬌鐢–ppUnit錛岃繕寰楄緗ソ澶存枃浠跺拰搴撴枃浠惰礬寰勶紝浠C6涓轟緥錛岄夋嫨Tools/Options/Directories錛屽湪Include files鍜孡ibrary files涓垎鍒坊鍔?CppUnitPath%/include鍜?CppUnitPath%/lib錛屽叾涓?CppUnitPath%琛ㄧずCppUnit鎵鍦ㄨ礬寰勩?/p>
鍋氬ソ鍑嗗宸ヤ綔鍚庯紝鎴戜滑灝卞彲浠ョ紪鍐欒嚜宸辯殑鍗曞厓嫻嬭瘯浠g爜浜嗐傞渶璇存槑鐨勬槸錛孋ppUnit鎵鐢ㄧ殑鍔ㄦ佽繍琛屾湡搴撳潎涓哄綰跨▼鍔ㄦ佸簱錛屽洜姝や綘鐨勫崟鍏冩祴璇曠▼搴忎篃寰椾嬌鐢ㄧ浉搴旇緗紝鍚﹀垯浼氬彂鐢熷啿紿併?/p>
姒傚康
鍦ㄤ嬌鐢ㄤ箣鍓嶏紝鎴戜滑鏈夊繀瑕佽璇嗕竴涓婥ppUnit涓殑涓昏綾伙紝褰撶劧浣犱篃鍙互鍏堢湅鍚庨潰鐨勪緥瀛愶紝閬囧埌闂鍐嶅洖榪囧ご鏉ョ湅榪欎竴鑺傘?/p>
CppUnit鏍稿績鍐呭涓昏鍖呮嫭鍏釜鏂歸潰錛?/p>
1. 嫻嬭瘯瀵硅薄錛圱est錛孴estFixture錛?..錛夛細鐢ㄤ簬寮鍙戞祴璇曠敤渚嬶紝浠ュ強瀵規祴璇曠敤渚嬭繘琛岀粍緇囩鐞嗐?/p>
2. 嫻嬭瘯緇撴灉錛圱estResult錛夛細澶勭悊嫻嬭瘯鐢ㄤ緥鎵ц緇撴灉銆俆estResult涓庝笅闈㈢殑TestListener閲囩敤鐨勬槸瑙傚療鑰呮ā寮忥紙Observer Pattern錛夈?/p>
3. 嫻嬭瘯緇撴灉鐩戝惉鑰咃紙TestListener錛夛細TestListener浣滀負TestResult鐨勮瀵熻咃紝鎷呬換瀹為檯鐨勭粨鏋滃鐞嗚鑹層?/p>
4. 緇撴灉杈撳嚭錛圤utputter錛夛細灝嗙粨鏋滆繘琛岃緭鍑猴紝鍙互鍒跺畾涓嶅悓鐨勮緭鍑烘牸寮忋?/p>
5. 瀵硅薄宸ュ巶錛圱estFactory錛夛細鐢ㄤ簬鍒涘緩嫻嬭瘯瀵硅薄錛屽嫻嬭瘯鐢ㄤ緥榪涜鑷姩鍖栫鐞嗐?/p>
6. 嫻嬭瘯鎵ц浣擄紙TestRunner錛夛細鐢ㄤ簬榪愯涓涓祴璇曘?/p>
浠ヤ笂鍚勬ā鍧楃殑涓昏綾葷戶鎵跨粨鏋勫涓嬶細
Test TestFixture TestResult TestListener _______|_________ | | | | | TestSuccessListener TestComposite TestLeaf | | | |____________| TestResultCollector TestSuit | TestCase | TestCaller<Fixture> Outputter TestFactory TestRunner ____________________|_________________ | | | | TestFactoryRegistry CompilerOutputter TextOutputter XmlOutputter | TestSuiteFactory<TestCaseType>鎺ヤ笅鏉ュ啀瀵瑰叾涓竴浜涘叧閿被浣滀互浠嬬粛銆?/p>
Test錛氭墍鏈夋祴璇曞璞$殑鍩虹被銆?/p>
CppUnit閲囩敤鏍戝艦緇撴瀯鏉ョ粍緇囩鐞嗘祴璇曞璞★紙綾諱技浜庣洰褰曟爲錛夛紝鍥犳榪欓噷閲囩敤浜嗙粍鍚堣璁℃ā寮忥紙Composite Pattern錛夛紝Test鐨勪袱涓洿鎺ュ瓙綾籘estLeaf鍜孴estComposite鍒嗗埆琛ㄧず“嫻嬭瘯鏍?#8221;涓殑鍙惰妭鐐瑰拰闈炲彾鑺傜偣錛屽叾涓璗estComposite涓昏璧風粍緇囩鐞嗙殑浣滅敤錛屽氨鍍忕洰褰曟爲涓殑鏂囦歡澶癸紝鑰孴estLeaf鎵嶆槸鏈緇堝叿鏈夋墽琛岃兘鍔涚殑嫻嬭瘯瀵硅薄錛屽氨鍍忕洰褰曟爲涓殑鏂囦歡銆?/p>
Test鏈閲嶈鐨勪竴涓叕鍏辨帴鍙d負錛?/p>
virtual void run(TestResult *result) = 0;鍏朵綔鐢ㄤ負鎵ц嫻嬭瘯瀵硅薄錛屽皢緇撴灉鎻愪氦緇檙esult銆?/p>
鍦ㄥ疄闄呭簲鐢ㄤ腑錛屾垜浠竴鑸笉浼氱洿鎺ヤ嬌鐢═est銆乀estComposite浠ュ強TestLeaf錛岄櫎闈炴垜浠閲嶆柊瀹氬埗鏌愪簺鏈哄埗銆?/p>
TestFixture錛氱敤浜庣淮鎶や竴緇勬祴璇曠敤渚嬬殑涓婁笅鏂囩幆澧冦?/p>
鍦ㄥ疄闄呭簲鐢ㄤ腑錛屾垜浠粡甯鎬細寮鍙戜竴緇勬祴璇曠敤渚嬫潵瀵規煇涓被鐨勬帴鍙e姞浠ユ祴璇曪紝鑰岃繖浜涙祴璇曠敤渚嬪緢鍙兘鍏鋒湁鐩稿悓鐨勫垵濮嬪寲鍜屾竻鐞嗕唬鐮併備負姝わ紝CppUnit寮曞叆TestFixture鏉ュ疄鐜拌繖涓鏈哄埗銆?/p>
TestFixture鍏鋒湁浠ヤ笅涓や釜鎺ュ彛錛屽垎鍒敤浜庡鐞嗘祴璇曠幆澧冪殑鍒濆鍖栦笌娓呯悊宸ヤ綔錛?/p>
virtual void setUp();
virtual void tearDown();TestCase錛氭祴璇曠敤渚嬶紝浠庡悕瀛椾笂灝卞彲浠ョ湅鍑烘潵錛屽畠渚挎槸鍗曞厓嫻嬭瘯鐨勬墽琛屽璞°?/p>
TestCase浠嶵est鍜孴estFixture澶氱戶鎵胯屾潵錛岄氳繃鎶奣est::run鍒跺畾鎴愭ā鏉垮嚱鏁幫紙Template Method錛夎屽皢涓や釜鐖剁被鐨勬搷浣滆瀺鍚堝湪涓璧鳳紝run鍑芥暟鐨勪吉瀹氫箟濡備笅錛?/p>
// 浼唬鐮?nbsp;
void TestCase::run(TestResult* result)
{
result->startTest(this); // 閫氱煡result嫻嬭瘯寮濮?br /> if( result->protect(this, &TestCase::setUp) ) // 璋冪敤setUp錛屽垵濮嬪寲鐜
result->protect(this, &TestCase::runTest); // 鎵цrunTest錛屽嵆鐪熸鐨勬祴璇曚唬鐮?br /> result->protect(this, &TestCase::tearDown); // 璋冪敤tearDown錛屾竻鐞嗙幆澧?br /> result->endTest(this); // 閫氱煡result嫻嬭瘯緇撴潫
}榪欓噷瑕佹彁鍒扮殑鏄嚱鏁皉unTest錛屽畠鏄疶estCase瀹氫箟鐨勪竴涓帴鍙o紝鍘熷瀷濡備笅錛?/p>
virtual void runTest();鐢ㄦ埛闇浠嶵estCase媧劇敓鍑哄瓙綾誨茍瀹炵幇runTest浠ュ紑鍙戣嚜宸辨墍闇鐨勬祴璇曠敤渚嬨?/p>
鍙﹀榪樿鎻愬埌鐨勫氨鏄疶estResult鐨刾rotect鏂規硶錛屽叾浣滅敤鏄鎵ц鍑芥暟錛堝疄闄呬笂鏄嚱鏁板璞★級鐨勯敊璇俊鎭紙鍖呮嫭鏂█鍜屽紓甯哥瓑錛夎繘琛屾崟鑾鳳紝浠庤屽疄鐜板嫻嬭瘯緇撴灉鐨勭粺璁°?/p>
TestSuit錛氭祴璇曞寘錛屾寜鐓ф爲褰㈢粨鏋勭鐞嗘祴璇曠敤渚?/p>
TestSuit鏄疶estComposite鐨勪竴涓疄鐜幫紝瀹冮噰鐢╲ector鏉ョ鐞嗗瓙嫻嬭瘯瀵硅薄錛圱est錛夛紝浠庤屽艦鎴愰掑綊鐨勬爲褰㈢粨鏋勩?/p>
TestCaller錛歍estCase閫傞厤鍣紙Adapter錛夛紝瀹冨皢鎴愬憳鍑芥暟杞崲鎴愭祴璇曠敤渚?/p>
铏界劧鎴戜滑鍙互浠嶵estCase媧劇敓鑷繁鐨勬祴璇曠被錛屼絾浠嶵estCase綾葷殑瀹氫箟鍙互鐪嬪嚭錛屽畠鍙兘鏀寔涓涓祴璇曠敤渚嬶紝榪欏浜庢祴璇曚唬鐮佺殑緇勭粐鍜岀淮鎶ゅ緢涓嶆柟渚匡紝灝ゅ叾鏄偅浜涙湁鍏卞悓涓婁笅鏂囩幆澧冪殑涓緇勬祴璇曘備負姝わ紝CppUnit鎻愪緵浜員estCaller浠ヨВ鍐寵繖涓棶棰樸?/p>
TestCaller鏄竴涓ā鏉跨被錛屽畠浠ュ疄鐜頒簡TestFixture鎺ュ彛鐨勭被涓烘ā鏉垮弬鏁幫紝灝嗙洰鏍囩被涓煇涓鍚坮unTest鍘熷瀷鐨勬祴璇曟柟娉曢傞厤鎴怲estCase鐨勫瓙綾匯?/p>
鍦ㄥ疄闄呭簲鐢ㄤ腑錛屾垜浠ぇ澶氶噰鐢═estFixture鍜孴estCaller鐩哥粍鍚堢殑鏂瑰紡錛屽叿浣撲緥瀛愬弬瑙佸悗鏂囥?/p>
TestResult鍜孴estListener錛氬鐞嗘祴璇曚俊鎭拰緇撴灉
鍓嶉潰宸茬粡鎻愬埌錛孴estResult鍜孴estListener閲囩敤浜嗚瀵熻呮ā寮忥紝TestResult緇存姢涓涓敞鍐岃〃錛岀敤浜庣鐞嗗悜鍏剁櫥璁拌繃鐨凾estListener錛屽綋TestResult鏀跺埌嫻嬭瘯瀵硅薄錛圱est錛夌殑嫻嬭瘯淇℃伅鏃訛紝鍐嶄竴涓鍒嗗彂緇欏畠鎵綆¤緰鐨凾estListener銆傝繖涓璁捐鏈夊姪浜庡疄鐜板鍚屼竴嫻嬭瘯鐨勫縐嶅鐞嗘柟寮忋?/p>
TestFactory錛氭祴璇曞伐鍘?/p>
榪欐槸涓涓緟鍔╃被錛岄氳繃鍊熷姪涓緋誨垪瀹忓畾涔夎嫻嬭瘯鐢ㄤ緥鐨勭粍緇囩鐞嗗彉寰楄嚜鍔ㄥ寲銆傚弬瑙佸悗闈㈢殑渚嬪瓙銆?/p>
TestRunner錛氱敤浜庢墽琛屾祴璇曠敤渚?/p>
TestRunner灝嗗緟鎵ц鐨勬祴璇曞璞$鐞嗚搗鏉ワ紝鐒跺悗渚涚敤鎴瘋皟鐢ㄣ傚叾鎺ュ彛涓猴細
virtual void addTest( Test *test ); virtual void run( TestResult &controller, const std::string &testPath = "" );榪欎篃鏄竴涓緟鍔╃被錛岄渶娉ㄦ剰鐨勬槸錛岄氳繃addTest娣誨姞鍒癟estRunner涓殑嫻嬭瘯瀵硅薄蹇呴』鏄氳繃new鍔ㄦ佸垱寤虹殑錛岀敤鎴蜂笉鑳藉垹闄よ繖涓璞★紝鍥犱負TestRunner灝嗚嚜琛岀鐞嗘祴璇曞璞$殑鐢熷懡鏈熴?/p>
浣跨敤
鍏堣鎴戜滑鐪嬬湅涓涓畝鍗曠殑渚嬪瓙錛?/p>
#include <cppunit/TestCase.h>緙栬瘧鍚庤繍琛岋紝杈撳嚭緇撴灉涓猴細
#include <cppunit/TestResult.h>
#include <cppunit/TestResultCollector.h>
#include <cppunit/TextOutputter.h>
// 瀹氫箟嫻嬭瘯鐢ㄤ緥
class SimpleTest : public CppUnit::TestCase
{
public:
void runTest() // 閲嶈澆嫻嬭瘯鏂規硶
{
int i = 1;
CPPUNIT_ASSERT_EQUAL(0, i);
}
};
int main(int argc, char* argv[])
{
CppUnit::TestResult r;
CppUnit::TestResultCollector rc;
r.addListener(&rc); // 鍑嗗濂界粨鏋滄敹闆嗗櫒
SimpleTest t;
t.run(&r); // 榪愯嫻嬭瘯鐢ㄤ緥
CppUnit::TextOutputter o(&rc, std::cout);
o.write(); // 灝嗙粨鏋滆緭鍑?br />
return 0;
}!!!FAILURES!!!
Test Results:
Run: 1 Failures: 1 Errors: 0
1) test: (F) line: 18 E:/CppUnitExamples/SimpleTest.cpp
equality assertion failed
- Expected: 1
- Actual : 0涓婇潰鐨勪緥瀛愬緢綆鍗曪紝闇璇存槑鐨勬槸CPPUNIT_ASSERT_EQUAL瀹忋侰ppUnit瀹氫箟浜嗕竴緇勫畯鐢ㄤ簬媯嫻嬮敊璇紝CPPUNIT_ASSERT_EQUAL鏄叾涓箣涓錛屽綋鏂█澶辮觸鏃訛紝CppUnit渚夸細灝嗛敊璇俊鎭姤鍛婄粰TestResult銆傝繖浜涘畯瀹氫箟鐨勮鏄庡涓嬶細
CPPUNIT_ASSERT(condition)錛氬垽鏂璫ondition鐨勫兼槸鍚︿負鐪燂紝濡傛灉涓哄亣鍒欑敓鎴愰敊璇俊鎭?/p>
CPPUNIT_ASSERT_MESSAGE(message, condition)錛氫笌CPPUNIT_ASSERT綾諱技錛屼絾緇撴灉涓哄亣鏃舵姤鍛妋esssage淇℃伅銆?/p>
CPPUNIT_FAIL(message)錛氱洿鎺ユ姤鍛妋esssage閿欒淇℃伅銆?/p>
CPPUNIT_ASSERT_EQUAL(expected, actual)錛氬垽鏂璭xpected鍜宎ctual鐨勫兼槸鍚︾浉絳夛紝濡傛灉涓嶇瓑杈撳嚭閿欒淇℃伅銆?/p>
CPPUNIT_ASSERT_EQUAL_MESSAGE(message, expected, actual)錛氫笌CPPUNIT_ASSERT_EQUAL綾諱技錛屼絾鏂█澶辮觸鏃惰緭鍑簃essage淇℃伅銆?/p>
CPPUNIT_ASSERT_DOUBLES_EQUAL(expected, actual, delta)錛氬垽鏂璭xpected涓巃ctual鐨勫亸宸槸鍚﹀皬浜巇elta錛岀敤浜庢誕鐐規暟姣旇緝銆?/p>
CPPUNIT_ASSERT_THROW(expression, ExceptionType)錛氬垽鏂墽琛岃〃杈懼紡expression鍚庢槸鍚︽姏鍑篍xceptionType寮傚父銆?/p>
CPPUNIT_ASSERT_NO_THROW(expression)錛氭柇璦鎵ц琛ㄨ揪寮廵xpression鍚庢棤寮傚父鎶涘嚭銆?/p>
鎺ヤ笅鏉ュ啀鐪嬬湅TestFixture鍜孴estCaller鐨勭粍鍚堜嬌鐢細
#include <cppunit/TestCase.h>緙栬瘧鍚庤繍琛岀粨鏋滀負錛?/span>
#include <cppunit/TestResult.h>
#include <cppunit/TestResultCollector.h>
#include <cppunit/TextOutputter.h>
#include <cppunit/TestCaller.h>
#include <cppunit/TestRunner.h>
// 瀹氫箟嫻嬭瘯綾?br />class StringTest : public CppUnit::TestFixture
{
public:
void setUp() // 鍒濆鍖?br /> {
m_str1 = "Hello, world";
m_str2 = "Hi, cppunit";
}
void tearDown() // 娓呯悊
{
}
void testSwap() // 嫻嬭瘯鏂規硶1
{
std::string str1 = m_str1;
std::string str2 = m_str2;
m_str1.swap(m_str2);
CPPUNIT_ASSERT(m_str1 == str2);
CPPUNIT_ASSERT(m_str2 == str1);
}
void testFind() // 嫻嬭瘯鏂規硶2
{
int pos1 = m_str1.find(',');
int pos2 = m_str2.rfind(',');
CPPUNIT_ASSERT_EQUAL(5, pos1);
CPPUNIT_ASSERT_EQUAL(2, pos2);
}
protected:
std::string m_str1;
std::string m_str2;
};
int main(int argc, char* argv[])
{
CppUnit::TestResult r;
CppUnit::TestResultCollector rc;
r.addListener(&rc); // 鍑嗗濂界粨鏋滄敹闆嗗櫒
CppUnit::TestRunner runner; // 瀹氫箟鎵ц瀹炰綋
runner.addTest(new CppUnit::TestCaller<StringTest>("testSwap", &StringTest::testSwap)); // 鏋勫緩嫻嬭瘯鐢ㄤ緥1
runner.addTest(new CppUnit::TestCaller<StringTest>("testFind", &StringTest::testFind)); // 鏋勫緩嫻嬭瘯鐢ㄤ緥2
runner.run(r); // 榪愯嫻嬭瘯
CppUnit::TextOutputter o(&rc, std::cout);
o.write(); // 灝嗙粨鏋滆緭鍑?br />
return rc.wasSuccessful() ? 0 : -1;
}OK (2 tests)涓婇潰鐨勪唬鐮佷粠鍔熻兘涓婅娌℃湁浠涔堥棶棰橈紝浣嗙紪鍐欒搗鏉ュお綣佺悙浜嗭紝涓烘錛屾垜浠彲浠ュ熷姪CppUnit瀹氫箟鐨勪竴濂楄緟鍔╁畯錛屽皢嫻嬭瘯鐢ㄤ緥鐨勫畾涔夊拰娉ㄥ唽鍙樺緱鑷姩鍖栥備笂闈㈢殑浠g爜鏀歸犲悗濡備笅錛?/p>
#include <cppunit/TestResult.h>
#include <cppunit/TestResultCollector.h>
#include <cppunit/TextOutputter.h>
#include <cppunit/TestRunner.h>
#include <cppunit/extensions/HelperMacros.h>
// 瀹氫箟嫻嬭瘯綾?br />class StringTest : public CppUnit::TestFixture
{
CPPUNIT_TEST_SUITE(StringTest); // 瀹氫箟嫻嬭瘯鍖?br /> CPPUNIT_TEST(testSwap); // 娣誨姞嫻嬭瘯鐢ㄤ緥1
CPPUNIT_TEST(testFind); // 娣誨姞嫻嬭瘯鐢ㄤ緥2
CPPUNIT_TEST_SUITE_END(); // 緇撴潫嫻嬭瘯鍖呭畾涔?br />
public:
void setUp() // 鍒濆鍖?br /> {
m_str1 = "Hello, world";
m_str2 = "Hi, cppunit";
}
void tearDown() // 娓呯悊
{
}
void testSwap() // 嫻嬭瘯鏂規硶1
{
std::string str1 = m_str1;
std::string str2 = m_str2;
m_str1.swap(m_str2);
CPPUNIT_ASSERT(m_str1 == str2);
CPPUNIT_ASSERT(m_str2 == str1);
}
void testFind() // 嫻嬭瘯鏂規硶2
{
int pos1 = m_str1.find(',');
int pos2 = m_str2.rfind(',');
CPPUNIT_ASSERT_EQUAL(5, pos1);
CPPUNIT_ASSERT_EQUAL(2, pos2);
}
protected:
std::string m_str1;
std::string m_str2;
};
CPPUNIT_TEST_SUITE_REGISTRATION(StringTest); // 鑷姩娉ㄥ唽嫻嬭瘯鍖?br />
int main(int argc, char* argv[])
{
CppUnit::TestResult r;
CppUnit::TestResultCollector rc;
r.addListener(&rc); // 鍑嗗濂界粨鏋滄敹闆嗗櫒
CppUnit::TestRunner runner; // 瀹氫箟鎵ц瀹炰綋
runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
runner.run(r); // 榪愯嫻嬭瘯
CppUnit::TextOutputter o(&rc, std::cout);
o.write(); // 灝嗙粨鏋滆緭鍑?br />
return rc.wasSuccessful() ? 0 : -1;
}CppUnit鐨勭畝鍗曚粙緇嶅氨鍒版錛岀浉淇′綘宸茬粡浜嗚В浜嗗叾涓殑鍩烘湰姒傚康錛屼篃鑳藉寮鍙戝崟鍏冩祴璇曚唬鐮佷簡銆?br />
杞嚜錛?a >http://blog.csdn.net/freefalcon/article/details/753819
]]>