锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 鑷姩嫻嬭瘯鍙互鑺傜渷閲嶅鎵ц鐩稿悓嫻嬭瘯姝ラ鐨?
鏃墮棿鍜岀簿鍔涖傛湰鏂囧皢浠嬬粛 jWebUnit錛岃繖鏄竴緇?Java 綾伙紝鐢ㄤ簬涓?Web 搴旂敤紼嬪簭寮鍙戞祴璇曠敤渚嬨俲WebUnit 鏄竴涓紑婧愰」鐩紝鍙互鍦?
BSD 璁稿彲涓嬪厤璐硅幏寰椼傛垜灝嗕粙緇嶅浣曚笅杞?jWebUnit 搴撱侀厤緗?Eclipse 騫沖彴鏉ュ紑鍙?jWebUnit
嫻嬭瘯鐢ㄤ緥錛屼互鍙?qiáng)濡備綍鏋勫晦Z竴涓ず渚嬫祴璇曠敤渚嬨?/p>
jWebUnit 綆浠?/span> 鐢?HttpUnit 榪涜嫻嬭瘯 娓呭崟 1 鏄劇ず浜嗕竴涓敤 HttpUnit 緙栧啓鐨勬祴璇曠敤渚嬶紝瀹冭瘯鍥懼崟鍑?HttpUnit 涓婚〉涓婄殑“Cookbook”閾炬帴錛?/p>
娓呭崟 1. 鍗曞嚮 HttpUnit 涓婚〉涓?Cookbook 閾炬帴鐨?HttpUnit 浠g爜 娓呭崟 1 涓殑浠g爜鐢? 鐢?jWebUnit 榪涜鐨勬祴璇曟洿綆鍗?/span> 濡傛灉娌℃敞鎰忔竻鍗?2 涓壒瀹氫簬 JUnit 鐨勪唬鐮侊紝閭d箞鎮(zhèn)ㄥ彲浠ョ湅鍒幫紝嫻嬭瘯鐢ㄤ緥鐜板湪鍙樺緱鐩稿綋鏁存磥銆佺畝緇冦傞渶瑕佹煡鐪嬬殑閲嶈鐨勮鏄 6 琛屻佺 11 琛屽拰絎?12 琛屻傚湪絎?6 琛岋紝鍩烘湰 URL 琚緗埌 HttpUnit 鐨勪富欏典腑銆傜 11 琛岀敤鐩稿璺緞 jWebUnit API錛氳繘涓姝ヨ瀵?/span> 鍙︿竴涓噸瑕佺殑綾繪槸 涓嬭澆 jWebUnit錛屽湪 Eclipse 涓厤緗?jWebUnit 鐜板湪鍙互鍦?Eclipse 涓殑 jWebUnit 欏圭洰涓嬪紑鍙?jWebUnit 嫻嬭瘯鐢ㄤ緥浜嗐? 鏋勫緩紺轟緥搴旂敤紼嬪簭 鐜板湪嫻嬭瘯鍦烘櫙宸茬粡灝辯華錛屽彲浠ョ紪鍐?Java 搴旂敤紼嬪簭錛岀敤 jWebUnit 瀹炵幇榪欎簺闇姹備簡銆?/p>
絎竴姝ユ槸澹版槑涓涓粠 姝e鎴戝湪鍓嶉潰鎻愬埌榪囩殑錛宩WebUnit 瑕佹眰姣忎釜嫻嬭瘯鐢ㄤ緥閮芥槸浠? 涓嬩竴姝ユ槸澹版槑鍏ュ彛鐐?鈥斺? 鎺ヤ笅鏉ワ紝 娓呭崟 5 鎶婂熀鏈?URL 璁劇疆涓? 鐜板湪寮濮嬫祻瑙堢珯鐐瑰茍杈撳叆鎼滅儲(chǔ)鍙傛暟銆傛竻鍗?6 鏄劇ず浜嗚闂?Web 欏甸潰錛岀劧鍚庢祴璇曟墍鏈夊満鏅殑浠g爜錛?/p>
娓呭崟 6. 嫻嬭瘯鎵鏈夊満鏅?/strong> 娓呭崟 6 鐨勪唬鐮佽繛鎺ュ埌鍩烘湰 URL錛屽茍鐩稿浜? 榪愯紺轟緥搴旂敤紼嬪簭 紺轟緥杈撳嚭 姝e鍦ㄦ竻鍗?7 涓彲浠ョ湅鍒扮殑錛屽彲浠ョ敤 娓呭崟 8 鎵ц鏃剁敤 緇撴潫璇?/span> 綃囬璇?/span> 鏈枃鍋囪璇昏呭凡緇忕啛鎮(zhèn)夊崟鍏冩祴璇曞強(qiáng)JUnit宸ュ叿鐨勪嬌鐢紝濡傛灉瀵瑰崟鍏冩祴璇曞強(qiáng)JUnit灝氫笉浜嗚В璇峰厛瀛︿範(fàn)鍗曞厓嫻嬭瘯鍙?/span>JUnit宸ュ叿鐨勭浉鍏崇煡璇嗐傝鑰呮渶濂藉Spring妗嗘灦鍙?/span>Spring妗嗘灦鎻愪緵鐨勫崟鍏冩祴璇曟敮鎸佹湁鎵浜嗚В錛屽洜涓烘湰鏂囨渚嬪熀浜?/span>Spring鎶鏈紪鍐欍備絾瀵?/span>Spring涓嶄簡瑙e茍涓嶅獎(jiǎng)鍝嶆湰鏂囨墍璁茶堪鐨勫崟鍏冩祴璇曠敤渚嬬紪鍐欏強(qiáng)鍥炶皟妯″紡銆佹ā鏉挎柟娉曠殑搴旂敤銆?/span> 鍗曞厓嫻嬭瘯鏄紪鍐欓珮璐ㄩ噺浠g爜鐨勫墠鎻愶紝閫氳繃緙栧啓鏈夋晥鐨勫崟鍏冩祴璇曞嵆鍙互淇濊瘉浠g爜鐨勮川閲忓張鍙互鎻愰珮寮鍙戦熷害錛屽洜涓哄ぇ澶氭暟闂閮藉彲浠ラ氳繃鍗曞厓嫻嬭瘯鍙戠幇騫惰В鍐寵屼笉闇瑕侀儴緗插埌搴旂敤鏈嶅姟鍣ㄣ傜旱瑙堢綉涓婃祦琛岀殑浼樼寮婧愭鏋訛紝鏃犱竴涓嶆彁渚涘畬鏁寸殑鍗曞厓嫻嬭瘯鐢ㄤ緥銆?/span>Spring妗嗘灦渚挎槸鍏朵腑鐨勪唬琛ㄥ拰浣間郊鑰咃紝鍥犱負(fù)Spring鎵閬靛驚鐨勬帶鍒跺弽杞紙IoC錛夊拰渚濊禆娉ㄥ叆錛?/span>DI錛夊師鍒欎嬌緙栧啓鏈夋晥銆佸共鍑鐨勫崟鍏冩祴璇曠敤渚嬪彉寰楁洿鍔犳柟渚褲佸揩鎹楓?/span>
緙栧啓鍗曞厓嫻嬭瘯鐢ㄤ緥 鏈枃鎵閲囩敤鐨勬渚嬮潪甯哥畝鍗曪紝灝辨槸瀵規(guī)暟鎹簱琛ㄧ殑澧炪佸垹銆佹敼銆佹煡鎿嶄綔榪涜嫻嬭瘯銆傚亣璁炬垜浠湁榪欐牱涓涓〃url錛?/span>MySql鏁版嵁搴擄級(jí)錛?/span>
瀛楁
綾誨瀷
鎻忚堪
id int 涓婚敭錛岃嚜澧炵被鍨?/font> url varchar 緗戠珯鍦板潃錛屽敮涓涓嶈兘閲嶅 email varchar Email鍦板潃 name varchar 鍚嶇О 姝e浣犳墍瑙侊紝璇ヨ〃鍙湁鍑犱釜瀛楁錛屼絾瀵逛簬鎴戜滑鐨勬渚嬫潵璇村畬鍏ㄥ鐢ㄣ?/font>
鐪嬪埌姝ゅ錛屼綘搴旇娓呮鎴戜滑鏄瀵規(guī)暟鎹簱鎿嶄綔榪涜鍗曞厓嫻嬭瘯銆傚鏋滀綘鏄竴浣嶇粡楠屼赴瀵岀殑寮鍙戜漢鍛橈紝姝ゆ椂宸茬粡浼?xì)鏈夎澶氱枒闂Q岀敋鑷沖凡緇忓け鍘葷戶緇槄璇繪湰鏂囩殑鍏磋叮錛?/span> ² 鍗曞厓嫻嬭瘯涓嶅簲璇ョ洿鎺ユ搷浣滄暟鎹簱錛?/font> ² 瀵規(guī)暟鎹簱鎿嶄綔鐨勫崟鍏冩祴璇曞彲浠ラ噰鐢?/span>DAO妯″紡錛?/span>Mock涓涓疄鐜扮被錛?/span> ² 浣跨敤鍐呭瓨鏁版嵁搴擄紵 ² 鍏朵粬錛?/font>
鏁版嵁搴撹〃鏈変簡錛屾垜浠帴涓嬫潵緙栧啓DAO鍙?qiáng)鍏跺疄鐜熬c伙細(xì)
DAO鎺ュ彛錛?/span>
DAO瀹炵幇綾伙紝璇ョ被緇ф壙涓涓敮鎸佺被錛屽皝瑁呬簡瀵規(guī)暟鎹簱鐨勬搷浣溿?/span> DO棰嗗煙瀵硅薄
鍥犱負(fù)鏈枃妗堜緥浣跨敤Spring浣滀負(fù)搴曞眰妗嗘灦錛屽洜姝よ繖閲岄渶瑕佺紪鍐?/span>Spring閰嶇疆鏂囦歡瀵?/span>DAO榪涜緇勮銆?/span> DAO鍙?qiáng)鍏堕厤缃枃錃g閮藉凡緇忓噯澶囧畬姣曪紝鎴戜滑鎺ヤ笅鏉ョ紪鍐欐祴璇曠敤渚嬨?/span>Spring涓哄崟鍏冩祴璇曟彁渚涗簡寰堝鏈夌敤鐨勬敮鎸佺被錛屾垜浠湪榪欓噷浣跨敤鐨勬槸錛?/span>
org.springframework.test.AbstractDependencyInjectionSpringContextTests
璇ョ被鎻愪緵浜?/span>POJO灞炴ц嚜鍔ㄦ敞鍏ョ殑鑳藉姏錛屽彧瑕佷負(fù)涓轟綘鐨勫睘鎬у瓧孌墊彁渚涗竴涓?/span>Set鏂規(guī)硶鍗沖彲銆備笅闈㈡垜浠潵鐪嬪畬鏁寸殑嫻嬭瘯鐢ㄤ緥錛?/span> getConfigLocations()鏂規(guī)硶涓?/span>AbstractDependencyInjectionSpringContextTests 鎻愪緵閰嶇疆錛?/span>Spring浼?xì)鏍规嵁璇ラ厤缃枃錃g鑷姩娉ㄥ叆bizUrlDAO灞炴с?/span>testInsert錛堬級(jí)鏂規(guī)硶鐢ㄤ簬嫻嬭瘯鎻掑叆鏂版暟鎹紝娉ㄦ剰榪欓噷鏈変釜闂錛屽鏋滄暟鎹簱涓凡緇忓瓨鍦ㄨURL鐨勮褰曪紝鍒欏簲鐢ㄤ細(xì)鎶ラ敊錛屾墍浠ヨ繖閲岃繕瑕佽繘琛屾暟鎹竻闄ゅ噯澶囧鐞嗭紝鎴戜滑縐頒箣涓?#8220;嫻嬭瘯鐜鍑嗗”錛屼互鍚庝細(xì)鐢ㄥ埌璇ュ悕璇嶏紱testDuplicateInsert錛堬級(jí)鏂規(guī)硶鐢ㄤ簬嫻嬭瘯鎻掑叆閲嶅鏁版嵁鐨勬儏鍐碉紝璇ユ柟娉曞悓鏍峰瓨鍦ㄤ笂闈㈢殑闂錛?/span>testDelete()鏂規(guī)硶鐢ㄤ簬嫻嬭瘯鍒犻櫎鏁版嵁鐨勬儏鍐碉紝榪欓噷灝界鍑嗗浜嗘暟鎹紝浣嗕粛娌℃湁鑰冭檻鏁版嵁搴撲腑宸茬粡鏈夎褰曠殑鎯呭喌銆?
Callback Function & Template Method Pattern
鍏充簬鏈妭鏄惁瑕佽緇嗕粙緇嶅洖璋冨嚱鏁幫紙Callback Function錛夊拰妯℃澘鏂規(guī)硶錛?/span>Template Method錛夋ā寮忕殑闂錛岀瑪鑰呰冭檻浜嗗緢闀挎椂闂淬傚洜涓虹綉緇滀笂瀵硅繖涓ょ鏅亶浣跨敤鐨勮璁℃ā寮忕殑瀹氫箟灞傚嚭涓嶇┓錛屽悇鏈夊悇鐨勯亾鐞嗭紝寰堥毦璇磋皝鏄皝闈炪傚喌涓旓紝閽堝涓嶅悓鐨勫簲鐢ㄥ満鏅紝榪欎袱縐嶆ā寮忎篃鏈夎澶氬彉浣擄紝鎴栬呰仈鍚堜嬌鐢ㄣ?/span> 鍥犳錛岀瑪鑰呮渶緇堝喅瀹氫笉鍦ㄦ澶勫榪欎袱縐嶆ā寮忓仛浠諱綍瀹氫箟鎴栧紩鐢紝璇瘋鑰呰嚜琛屽弬闃呯浉鍏蟲枃妗h祫鏂欍?/font> 鍥炶皟鍑芥暟鍜屾ā鏉挎柟娉曟ā寮忓湪鍗曞厓嫻嬭瘯涓殑搴旂敤
棣栧厛錛岃鎴戜滑綆鍗曟葷粨涓涓嬪墠闈㈡祴璇曠敤渚嬬殑闂錛?/font> 涓銆?/font> 鎶借薄灞傛澶綆錛屼笉澶熼氱敤錛?/span> 渚嬪錛屽浜?/font>getConfigLocations錛堬級(jí)鏂規(guī)硶錛屾垜浠畬鍏ㄥ彲浠ユ斁鍒頒竴涓埗綾諱腑瀹炵幇錛屽洜涓哄浜庝竴涓」鐩岃█錛屽叾閰嶇疆鏂囦歡澶у閮芥槸緇熶竴鐨勶紝娌℃湁蹇呰鍦ㄦ病鏈夋祴璇曠被涓兘瀹氫箟璇ユ柟娉曘?/font> 濡傚浘鎵紺猴紝鎴戜滑鎻愮偧浜嗕竴涓娊璞℃敮鎸佺被錛屽疄鐜頒簡getConfigLocations錛堬級(jí)鏂規(guī)硶錛屽悓鏃惰繕鎻愪緵浜?/font>getCustomConfigLocations()鏂規(guī)硶渚涘瓙綾諱嬌鐢紝瀛愮被鍙互閫氳繃閲嶈澆璇ユ柟娉曟彁渚涘畾鍒剁殑閰嶇疆銆?/font>
鏈変簡璇ユ敮鎸佺被錛屽叿浣撴祴璇曠被鍙渶瑕佺戶鎵胯綾誨茍緙栧啓嫻嬭瘯閫昏緫鍗沖彲銆?/font> 浜屻?/font> 緙哄皯鍑嗗嫻嬭瘯鐜鍜屾竻闄ゆ祴璇曟暟鎹殑鐜妭錛?/span>
瀵?
浜庡ぇ澶氭暟嫻嬭瘯鐢ㄤ緥錛屽彲鑳介兘浼?xì)娑夊強(qiáng)鍒板垵濮嬪寲鏁版嵁鍜屾竻闄箣璇曟暟鎹殑闂锛屾渶鍏稿瀷鐨勫氨鏄暟鎹簱鎿嶄綔錛岃繖涔熸槸鏈枃閲囩敤鏁版嵁搴撴搷浣滀綔涓烘渚嬬殑鍘熷洜銆傞偅涔堝浣曞疄鐜板憿錛?
寰堟樉鐒跺湪姣忎釜嫻嬭瘯鏂規(guī)硶涓兘緙栧啓鍑嗗鐜鍜屾竻闄ゆ祴璇曟暟鎹殑浠g爜鏄笉鍚堥傜殑錛屽洜涓哄ぇ澶氭暟鏃跺欏浜庝竴涓祴璇曠被鑰岃█錛屽噯澶囩幆澧冨拰娓呴櫎鏁版嵁鐨勯昏緫閮芥槸涓鏍風(fēng)殑銆傝仾鏄庣殑
浣犱竴瀹氫細(xì)鎯沖埌瀹氫箟涓や釜鏂規(guī)硶錛屼竴涓垵濮嬪寲鐜錛屼竴涓竻闄ゆ祴璇曟暟鎹傛槸鐨勶紝灝辨槸榪欐牱錛?/font> 濡備綘鎵瑙侊紝鎴戜滑鍦ㄨ繖閲屽畾涔変簡setupEnv()鍜?/span>cleanEnv()涓や釜鏂規(guī)硶錛屽垎鍒敤浜庡垵濮嬪寲鐜鍜屾竻闄ゆ祴璇曟暟鎹紝鐒跺悗鍦ㄦ祴璇曟柟娉曞紑濮嬪拰緇撴潫鏃跺垎鍒皟鐢ㄨ繖涓や釜鏂規(guī)硶銆傝繖鐨勭‘杈懼埌浜嗘垜浠殑鐩殑錛屼笉鐢ㄥ湪姣忎釜嫻嬭瘯鏂規(guī)硶涓兘緙栧啓鍒濆鍖栧拰娓呴櫎閫昏緫錛佷絾姝ゆ椂浣犱竴瀹氬彂鐜板湪姣忎釜嫻嬭瘯鏂規(guī)硶鍓嶅悗閮借皟鐢?/span>setupEnv()鍜?/span>cleanEnv()涔熷緢涓嶇埥錛岄偅璇存槑鎴戜滑鐨勬娊璞$▼搴﹁繕涓嶅錛侀偅涔堣濡備綍鍋氱殑鏇村ソ鍛紵
榪欓噷璇ュ埌妯℃澘鏂規(guī)硶錛?/span>Template Method錛夋ā寮忓彂鎸ュ▉鍔涚殑鏃跺欎簡銆傛垜浠皢浣跨敤妯℃澘鏂規(guī)硶鏉ョ戶緇噸鏋勫墠闈㈢殑妗堜緥銆傝鎴戜滑鍏堟潵瀹氫箟涓涓柟娉曪細(xì) 鐩告瘮涔嬪墠鐨勬柟娉曪紝鎴戜滑榪欓噷宸茬粡鏈変簡涓浜涜繘姝ワ紝瀹氫箟浜嗕竴涓?/span>execute鏂規(guī)硶錛屽湪璇ユ柟娉曞紑濮嬪拰緇撴潫鍒嗗埆鎵ц鍒濆鍖栧拰娓呴櫎閫昏緫錛岀劧鍚庣敱doTestLogic()鏂規(guī)硶瀹炵幇嫻嬭瘯閫昏緫銆傚疄闄呮祴璇曟柟娉曚腑鍙鎵цexecute鏂規(guī)硶錛屽茍浼犲叆嫻嬭瘯閫昏緫灝卞彲浠ヤ簡銆傜灖錛屼笉緇忔剰闂存垜浠凡緇忓疄鐜頒簡妯℃澘鏂規(guī)硶妯″紡鈥斺?strong>鎶婇氱敤鐨勯昏緫灝佽漿璧鋒潵錛屽彉鍖栫殑閮ㄥ垎鐢卞叿浣撴柟娉曟彁渚?/strong>銆傛庝箞錛屼笉鐩鎬俊涔堬紵鍛靛懙錛岃璁℃ā寮忓叾瀹炲茍涓嶅鏉傦紝灝辨槸鍓嶄漢瑙e喅閫氱敤闂鐨勪竴浜涙渶浣?jīng)_疄璺墊葷粨鑰屽凡銆?/span> 姝ゆ椂浣犲彲鑳戒細(xì)璇達(dá)紝TeseCase綾誨凡緇忔彁渚涗簡setUp()鍜?/span>tearDown()鏂規(guī)硶鏉ュ仛榪欎歡浜嬫儏錛屾垜涔熸兂鍒頒簡錛屽搱鍝堬紒浣嗚繖騫朵笉鍜屾湰鏂囦駭鐢熷啿紿侊紒
jWebUnit 浠?HttpUnit錛堜竴涓繘琛?Web 搴旂敤紼嬪簭鑷姩嫻嬭瘯鐨?Java 搴擄級(jí)鍜?JUnit 鍗曞厓嫻嬭瘯妗嗘灦涓哄熀紜錛堣鍙傞槄 鍙傝冭祫鏂?/a>錛夈?
jWebUnit 鎻愪緵浜嗗鑸?Web 搴旂敤紼嬪簭鐨勯珮綰?
API錛屽茍緇勫悎浜嗕竴緇勬柇璦錛岀敤瀹冧滑鏉ラ獙璇侀摼鎺ュ鑸佽〃鍗曡緭鍏ラ」鍜屾彁浜ゃ佽〃鏍煎唴瀹逛互鍙?qiáng)鍏朵粬鍏稿瀷鍟嗗?Web 搴旂敤紼嬪簭鐗規(guī)х殑姝g‘鎬с?jWebUnit 浠?
JAR 鏂囦歡褰㈠紡鎻愪緵鐨勶紝鍙互寰堝鏄撳湴灝嗗畠鎻掑叆澶у鏁?IDE 涓紝jWebUnit 涔熷寘鍚叾浠栧繀瑕佺殑搴撱?/p>
瀵?
Web 搴旂敤紼嬪簭鑷姩榪涜嫻嬭瘯鎰忓懗鐫璺寵繃 Web 嫻忚鍣紝閫氳繃紼嬪簭鏉ュ鐞?Web 绔欑偣銆傞鍏堬紝鎴戣浠嬬粛 HttpUnit錛圝WebUnit
鐨勬瀯寤哄潡涔嬩竴錛夋槸濡備綍綆鍖栬繖欏瑰伐浣滅殑銆侶ttpUnit 鍙互妯℃嫙甯с丣avaScript銆侀〉闈㈤噸瀹氬悜 cookie錛岀瓑絳夈傚湪灝?HttpUnit
鐢ㄤ簬 JUnit 鏃訛紝瀹冨彲浠ヨ繀閫熷湴瀵?Web 绔欑偣鐨勫姛鑳借繘琛岄獙璇併?/p>
1 public class HttpUnitTest {
2 public static void main(String[] args) {
3 try {
4 WebConversation wc = new WebConversation();
5 WebRequest request =
new GetMethodWebRequest("http://httpunit.sourceforge.net/index.html");
6 wc.setProxyServer( "your.proxy.com", 80 );
7 WebResponse response = wc.getResponse(request);
8 WebLink httpunitLink =
response.getFirstMatchingLink(WebLink.MATCH_CONTAINED_TEXT,"Cookbook");
9 response = httpunitLink.click();
10 System.out.println("Test successful !!");
11 } catch (Exception e) {
12 System.err.println("Exception: " + e);
13 }
14 }
15 }
your.proxy.com
錛堢 6 琛岋級(jí)榪炴帴 Internet銆傚鏋滃瓨鍦ㄧ洿鎺?Internet 榪炴帴錛岄偅涔堝彲浠ユ妸榪欎釜璇彞娉ㄩ噴鎺夈傜 8 琛岀殑璇彞鍦ㄩ〉闈腑鎼滅儲(chǔ)鍖呭惈鏂囨湰 Cookbook 鐨?Web 閾炬帴銆傜 9 琛岀殑璇彞鐢ㄤ簬鍗曞嚮榪欎釜閾炬帴銆傚鏋滄壘鍒伴摼鎺ワ紝閭d箞鐢ㄦ埛浼?xì)鐪嬪?Test Successful !!
榪欐潯娑堟伅銆?/p>
娓呭崟 2 鐨勬祴璇曠敤渚嬬敤 jWebUnit API 鎵ц鍜屾竻鍗?1 鐩稿悓鐨勪換鍔★細(xì)
1 public class JWebUnitTest extends WebTestCase{
2 public static void main(String[] args){
3 junit.textui.TestRunner.run(new TestSuite(JWebUnitTest.class));
4 }
5 public void setUp(){
6 getTestContext().setBaseUrl("http://httpunit.sourceforge.net");
7 getTestContext().setProxyName("webproxy.watson.ibm.com");
8 getTestContext().setProxyPort(8080);
9 }
10 public void testSearch(){
11 beginAt("/index.html");
12 clickLinkWithText("Cookbook");
13 }
14 }
/index.html
榪炴帴绔欑偣銆傜 12 琛岀敤浜庡崟鍑婚〉闈笂鍏鋒湁鏂囨湰 Cookbook 鐨勯摼鎺ャ傚鏋滈摼鎺ユ湁鏁堬紝閭d箞 JUnit 浼?xì)鎶ュ憡鎴愬姛锛涘惁鍒欏Q孞Unit 浼?xì)鎶ュ憡寮傚父銆?/p>
姣忎釜 jWebUnit 嫻嬭瘯鐨勬牳蹇冮兘鏄?net.sourceforge.jwebunit.WebTestCase
綾伙紝瀹冧唬琛ㄦ祴璇曠敤渚嬨傛瘡涓祴璇曠敤渚嬮兘蹇呴』鏄粠榪欎釜綾繪墿灞曡屾潵銆傦紙net.sourceforge.jwebunit.WebTestCase
綾繪湰韜垯鏄粠 junit.framework.TestCase
綾繪墿灞曡屾潵鐨勶紝瀹冨湪 JUnit 涓唬琛ㄦ祴璇曠敤渚嬨傦級(jí) 琛?1 鎻忚堪浜嗚繖涓被鐨勪竴浜涘父鐢ㄦ柟娉曪細(xì)
鏂規(guī)硶
璇存槑
public TestContext getTestContext()
寰楀埌嫻嬭瘯鐢ㄤ緥鐨勪笂涓嬫枃銆傚彲浠ョ敤瀹冭闂儚鍦板尯銆佸熀鏈?URL 鍜?cookie 涔嬬被鐨勯」鐩?/td>
public void beginAt(String relativeURL)
鍦ㄧ浉瀵逛簬鍩烘湰 URL 鐨?URL 澶勫紑濮嬪璇?/td>
public void setWorkingForm(String nameOrId)
涓庢寚瀹氱殑琛ㄥ崟寮濮嬩氦浜掋傚鏋滃綋鍓嶉〉闈㈠彧鏈変竴涓〃鍗曪紝灝變笉闇瑕佽皟鐢ㄨ繖涓柟娉?/td>
protected void submit()
鎻愪氦琛ㄥ崟 鈥斺?絳夊悓浜庡崟鍑昏〃鍗曠殑 鎻愪氦 鎸夐挳
public void gotoFrame(String frameName)
嬋媧誨懡鍚嶅撫
net.sourceforge.jwebunit.TestContext
銆傚畠涓烘祴璇曞垱寤轟笂涓嬫枃銆傚彲浠ョ敤榪欎釜綾繪潵澶勭悊鍍?cookie銆佷細(xì)璇濆拰鎺堟潈涔嬬被鐨勪俊鎭傝〃 2 鏄劇ず浜嗚繖涓被鐨勪竴浜涢噸瑕佹柟娉曪細(xì)
鏂規(guī)硶
璇存槑
public void addCookie(String name, String value)
鍚戞祴璇曚笂涓嬫枃涓坊鍔?cookie銆傚湪 HttpUnitDialog
寮濮嬫椂錛屾坊鍔犵殑 cookie 琚緗埌 WebConversation
涓?/td>
public void setResourceBundleName(String name)
涓烘祴璇曚笂涓嬫枃璁劇疆涓涓嬌鐢ㄧ殑璧勬簮緇戝畾銆傜敤浜庢寜鐓? WebTester
涓殑閿煡鎵炬湡鏈涚殑鍊?/td>
public void setProxyName(String proxyName)
涓烘祴璇曚笂涓嬫枃璁劇疆浠g悊鏈嶅姟鍣ㄥ悕縐?/td>
public void setBaseUrl(String url)
涓烘祴璇曚笂涓嬫枃璁劇疆鍩烘湰 URL
jWebUnit 鏄敤綰?Java 浠g爜瀹炵幇鐨勶紝鎵浠ュ彲浠ヤ互 JAR 鏂囦歡鐨勫艦寮忚幏寰楀畠 錛堣鍙傞槄 鍙傝冭祫鏂?/a>錛屼粠涓幏寰椾笅杞介摼鎺ワ級(jí)銆傚湪瀹屾垚涓嬭澆涔嬪悗錛岃鎸変互涓嬫楠ゅ湪 Eclipse 騫沖彴涓婇厤緗?jWebUnit 搴擄細(xì)
鐜板湪灝卞彲浠ユ煡鐪?jWebUnit API 鐨勫疄闄呭簲鐢ㄤ簡銆傛垜灝嗗甫鎮(zhèn)ㄧ爺絀朵竴涓ず渚嬪簲鐢ㄧ▼搴忥紝甯姪鎮(zhèn)ㄦ洿濂藉湴鐞嗚В jWebUnit 鐨勭湡姝e▉鍔涖傝繖涓簲鐢ㄧ▼搴忔槸涓涓祴璇曠敤渚嬶紝鐢ㄤ簬鎵撳紑涓涓?Google 鎼滅儲(chǔ)欏甸潰騫舵悳绱㈡枃鏈?HttpUnit銆傚簲鐢ㄧ▼搴忛渶瑕佹祴璇曚互涓嬪満鏅細(xì)
q
鐨勮〃鍗曞厓绱犮傦紙鍦?Google 鐨勪富欏典笂錛屽悕涓?q
鐨勬枃鏈鏄帴鍙楃敤鎴鋒煡璇㈣緭鍏ョ殑鏂囨湰妗嗐傦級(jí)搴旂敤紼嬪簭鐢ㄨ繖涓厓绱犺緭鍏ユ悳绱㈠弬鏁般?br />
HttpUnit Home
錛屽茍鎻愪氦琛ㄥ崟銆?br />
WebTestCase
鎵╁睍鑰屾潵鐨勭被錛屽娓呭崟 3 鎵紺猴細(xì)
public class GoogleTest extends WebTestCase {
static String searchLink = "";
}
WebTestCase
涓墿灞曡屾潵鐨勩?code>searchLink 淇濆瓨浼犲叆鐨勬悳绱㈠弬鏁般傝繖涓間互鍛戒護(hù)琛屽弬鏁扮殑褰㈠紡浼犻掔粰嫻嬭瘯鐢ㄤ緥銆?/p>
main()
鏂規(guī)硶錛屽娓呭崟 4 鎵紺猴細(xì) main()
鏂規(guī)硶
public static void main(String[] args) {
searchLink = args[0];
junit.textui.TestRunner.run(new TestSuite(GoogleTest.class));
}
main()
鏂規(guī)硶璋冪敤 junit.textui.TestRunner.run()
鎵ц JTest
嫻嬭瘯鐢ㄤ緥銆傚洜涓洪渶瑕佽繍琛?GoogleTest
嫻嬭瘯鐢ㄤ緥錛屾墍浠ワ紝浣滀負(fù)鍙傛暟浼犻掔粰 run()
鏂規(guī)硶鐨勬祴璇曞浠墮噰鐢?GoogleTest.class
浣滀負(fù)鍙傛暟銆?/p>
JTest
璋冪敤 setUp()
鏂規(guī)硶鏉ヨ緗熀鏈?URL 鍜屼唬鐞嗭紝濡傛竻鍗?5 鎵紺猴細(xì)
public void setUp() {
getTestContext().setBaseUrl("http://www.google.com");
getTestContext().setProxyName("proxy.host.com");
getTestContext().setProxyPort(80);
}
http://www.google.com
銆傝繖鎰忓懗鐫嫻嬭瘯鐢ㄤ緥鐨勫惎鍔ㄦ槸鐩稿浜庤繖涓?URL 鐨勩備笅闈袱涓鍙ヨ緗繛鎺ュ埌 Internet 鐨勪唬鐞嗕富鏈哄拰浠g悊绔彛銆傚鏋滄槸鐩存帴榪炴帴鍒?Internet錛岄偅涔堝彲浠ュ拷鐣ヤ唬鐞嗚緗鍙ャ?/p>
public void testSearch() {
beginAt("/");
assertFormElementPresent("q");
setFormElement("q", "HttpUnit");
submit("btnG");
assertLinkPresentWithText(searchLink);
clickLinkWithText(searchLink);
}
/
寮濮嬫祻瑙堛傜劧鍚庡畠鏂畾欏甸潰涓寘鍚竴涓悕涓?q
鐨勮〃鍗曞厓绱?鈥斺?q 鏄?Google 涓婚〉涓婃煡璇㈣緭鍏ユ枃鏈鐨勫悕縐般備笅涓鏉¤鍙ョ敤鍊?HttpUnit
璁劇疆鍚嶄負(fù) q
鐨勬枃鏈銆傚啀涓嬩竴鏉¤璦鎻愪氦琛ㄥ崟涓婂悕涓?btnG
鐨勬彁浜ゆ寜閽傦紙鍦?Google 鐨勪富欏典笂錛屽悕涓?btnG
鐨勬寜閽槸鏍囩涓?Google Search 鐨勬寜閽傦級(jí)琛ㄥ崟鏄湪榪欎釜瀵硅瘽涓彁浜ょ殑錛屼笅涓欏靛垪鍑烘悳绱㈢粨鏋溿傚湪緇撴灉欏甸潰涓婏紝浠g爜棣栧厛媯(gè)鏌ユ槸鍚︽湁涓涓摼鎺ョ殑鏂囨湰鏄?HttpUnit Home銆傚鏋滆閾炬帴涓嶅瓨鍦紝閭d箞嫻嬭瘯灝變互 AssertionFailedError
澶辮觸銆傚鏋滆閾炬帴瀛樺湪錛屽垯嫻嬭瘯鎵ц鐨勪笅涓涓搷浣滄槸鍗曞嚮閾炬帴銆?
鐜板湪鎶婄ず渚嬪簲鐢ㄧ▼搴忔姇鍏ヤ嬌鐢ㄥ綋涓細(xì)
JAR_BASE
鎸囧悜鍖呭惈鎵鏈夊繀闇 JAR 鏂囦歡鐨勭洰褰曘備緥濡傦紝濡傛灉鍦?C:\temp 涓噴鏀?jwebunit-1.2.zip 鏂囦歡錛岄偅涔堝皢 JAR_BASE 璁劇疆涓?C:\temp\jwebunit-1.2\lib銆?br />
setclasspath.bat
銆傝繖浼?xì)璁揪|墽琛屾祴璇曠敤渚嬫墍闇鐨?CLASSPATH
銆?br />
java com.jweb.test.GoogleTest "HttpUnit Home"
榪愯搴旂敤紼嬪簭銆?/li>
鍦ㄦ墽琛屼簡嫻嬭瘯鐢ㄤ緥涔嬪悗錛屼細(xì)鍦ㄥ懡浠よ杈撳嚭涓涓祴璇曠敤渚嬫姤鍛娿傚鏋滄祴璇曞け璐ワ紝鎶ュ憡鐪嬭搗鏉ュ娓呭崟 7 涓墍紺猴細(xì)
C:\temp>java com.jweb.test.GoogleTest "HttpUnit Hwee"
.F
Time: 5.338
There was 1 failure:
1) testSearch(com.jweb.test.GoogleTest)junit.framework.AssertionFailedError: Link
with text [HttpUnit Hwee] not found in response.
at net.sourceforge.jwebunit.WebTester.assertLinkPresentWithText(WebTester.java:618)
at net.sourceforge.jwebunit.WebTestCase.assertLinkPresentWithText(WebTestCase.java:244)
at com.jweb.test.GoogleTest.testSearch(GoogleTest.java:36)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at com.jweb.test.GoogleTest.main(GoogleTest.java:19)
FAILURES!!!
Tests run: 1, Failures: 1, Errors: 0
HttpUnit Hwee
浣滀負(fù)鍙傛暟鏉ユ墽琛屾祴璇曠敤渚嬨傝繖涓祴璇曠敤渚嬮亣鍒版柇璦鐨勫湴鏂逛細(xì)澶辮觸錛屽洜涓虹粨鏋滈〉闈腑涓嶅寘鍚甫鏈夎繖涓枃鏈殑閾炬帴銆傜敱姝や篃灝變駭鐢熶簡junit.framework.AssertionFailedError
銆?/p>
HttpUnit Home
浣滀負(fù)鍙傛暟銆傛祴璇曠敤渚嬫壘鍒頒竴涓甫鏈夎繖涓枃鏈殑閾炬帴錛屾墍浠ユ祴璇曢氳繃浜嗭細(xì)
C:\temp>java com.jweb.test.GoogleTest "HttpUnit Home"
.
Time: 6.991
OK (1 test)
鏈?
鏂囬氳繃璁ㄨ jWebUnit 妗嗘灦鐨勪竴浜涚獊鍑虹壒鎬у拰鏈閲嶈鐨勭被錛屼粙緇嶅浣曠敤瀹冨垱寤虹畝媧佺殑嫻嬭瘯鐢ㄤ緥錛岃鎮(zhèn)ㄥ jWebUnit
妗嗘灦鏈変竴涓璇嗐俲WebUnit 榪樻湁鏇村鐗規(guī)у彲浠ョ敤鍦ㄦ祴璇曠敤渚嬩腑銆傚畠鏀寔嫻嬭瘯 Web
欏甸潰涓殑閾炬帴琛屾暟銆傚彲浠ュ瀛楃涓層佽〃鎴栬呭甫鏈夋寚瀹氭爣絳劇殑琛ㄥ崟杈撳叆鍏冪礌鏄惁瀛樺湪浜庨〉闈笂榪涜鏂█銆傛澶栵紝jWebUnit 榪樺彲浠ュ鐞?cookie
錛堜緥濡傛柇璦瀛樺湪鏌愪釜 cookie銆佸垹闄?cookie 絳夈傦級(jí)嫻嬭瘯鍙互瀵規(guī)煇涓枃鏈箣鍚庡嚭鐜扮殑鐗瑰畾鏂囨湰鐨勯摼鎺ヨ繘琛屽崟鍑匯?濡傛灉鎯充負(fù) Web
搴旂敤紼嬪簭鏋勫緩蹇屾湁鏁堢殑嫻嬭瘯鐢ㄤ緥錛宩WebUnit 鍙兘鏄?zhèn)ㄦ渶濂界殑鏈嬪弸銆?/p>
]]>
]]>
/**
* @author tao.youzt
*/
public interface BizUrlDAO {
public Object insert(BizUrlDO bizUrlDO);
public int delete(String url);
public BizUrlDO getByUrl(String url);
}
/**
* @author tao.youzt
*/
public class BizUrlIbatisImpl extends GodzillaDaoSupport implements BizUrlDAO {
private static final String GET_BY_URL = "Select-BIZ-URL";
private static final String Delete = "Delete-BIZ-URL";
private static final String Insert = "Insert-BIZ-URL";
public int delete(String url) {
return this.delete(Delete, url);
}
public BizUrlDO getByUrl(String url) {
return this.queryForObject(GET_BY_URL, url, BizUrlDO.class);
}
public Object insert(BizUrlDO bizUrlDO) {
return this.insert(Insert, bizUrlDO);
}
}
/**
* @author tao.youzt
*/
public class BizUrlDO {
private int id;
private String url;
private String email;
private String name;
// getter and setter
}
/**
* @author tao.youzt
*/
public class TestBizUrlDAO extends AbstractDependencyInjectionSpringContextTests {
private BizUrlDAO bizUrlDAO;
@Override
protected String[] getConfigLocations() {
return new String[]{"godzilla-dao.xml","godzilla-db.xml"};
}
public void testInsert(){
bizUrlDAO.insert(generateDO());
assertNotNull(bizUrlDAO.getByUrl("www.easyjf.com"));
}
public void testDuplicateInsert(){
bizUrlDAO.insert(generateDO());
try{
bizUrlDAO.insert(generateDO());
assertFalse("Must throw an exception!",true);
}catch(Exception e){
assertTrue(true);
}
}
public void testDelete(){
bizUrlDAO.insert(generateDO());
assertNotNull(bizUrlDAO.getByUrl("www.easyjf.com"));
bizUrlDAO.delete("www.easyjf.com");
assertNull(bizUrlDAO.getByUrl("www.easyjf.com"));
}
private BizUrlSynchronizeDO generateDO() {
BizUrlDO bizUrlDO = new BizUrlDO();
bizUrlDO.setUrl("www.easyjf.com");
bizUrlDO.setName("EasyJWeb");
bizUrlDO.setEmail("webmaster@easyjf.com");
return bizUrlDO;
}
public void setBizUrlDAO(BizUrlSynchronzieDAO bizUrlDAO) {
this.bizUrlDAO = bizUrlDAO;
}
}
/**
* DAL灞傛祴璇曟敮鎸佺被.
*
*
* 闄ら潪鐗規(guī)畩鎯呭喌,鎵鏈塂AO閮借緇ф壙姝ょ被.
*
* @author tao.youzt
*/
public abstract class GodzillaDalTestSupport extends AbstractDependencyInjectionSpringContextTests {
/*
* @see org.springframework.test.AbstractDependencyInjectionSpringContextTests#getConfigLocations()
*/
@Override
protected final String[] getConfigLocations() {
String[] configLocations = null;
String[] customConfigLocations = getCustomConfigLocations();
if (customConfigLocations != null && customConfigLocations.length > 0) {
configLocations = new String[customConfigLocations.length + 2];
configLocations[0] = "classpath:godzilla/dal/godzilla-db-test.xml";
configLocations[1] = "classpath:godzilla/dal/godzilla-dao.xml";
for (int i = 2; i < configLocations.length; i++) {
configLocations[i] = customConfigLocations[i - 2];
}
return configLocations;
} else {
return new String[] { "classpath:godzilla/dal/godzilla-db-test.xml",
"classpath:godzilla/dal/godzilla-dao.xml" };
}
}
/**
* 瀛愮被鍙互瑕嗙洊璇ユ柟娉曞姞杞戒釜鎬у寲閰嶇疆.
*
* @return
*/
protected String[] getCustomConfigLocations() {
return null;
}
}
/**
* @author tao.youzt
*/
public class TestBizUrlDAO extends AbstractDependencyInjectionSpringContextTests {
private BizUrlDAO bizUrlDAO;
@Override
protected String[] getConfigLocations() {
return new String[]{"godzilla-dao.xml","godzilla-db.xml"};
}
protected void setupEnv(){
bizUrlDAO.delete("www.easyjf.com");
}
protected void cleanEnv(){
bizUrlDAO.delete("www.easyjf.com");
}
public void testTemp(){
setupEnv();
bizUrlDAO.insert(generateDO());
assertNotNull(bizUrlDAO.getByUrl("www.easyjf.com"));
setupEnv();
}
}
/**
* @author tao.youzt
*/
public class TestBizUrlDAO extends AbstractDependencyInjectionSpringContextTests {
private BizUrlDAO bizUrlDAO;
@Override
protected String[] getConfigLocations() {
return new String[]{"godzilla-dao.xml","godzilla-db.xml"};
}
protected void setupEnv(){
bizUrlDAO.delete("www.easyjf.com");
}
protected void cleanEnv(){
bizUrlDAO.delete("www.easyjf.com");
}
public void testTemp(){
//do test logic in this method
execute();
}
protected void execute(){
setupEnv();
doTestLogic();
setupEnv();
}
}
鍙兘姝ゆ椂姝ゅ埢浣犲凡緇忔兂鍒幫紝鏈枃鍙︿竴涓噸瑕佹蹇碘斺斿洖璋冩柟娉曟ā寮忚繕娌℃湁鐢ㄥ埌錛屾槸涓嶆槸璇ヤ嬌鐢ㄨ妯″紡浜嗭紵娌¢敊錛屽氨鏄畠浜嗭紒鎴戝厛鎶婁唬鐮佺粰鍑猴紝鐒跺悗鍐嶈緇嗚В閲娿?/font>
鎴戜滑鎻愪緵浜嗕竴涓娊璞$被TestExecutor錛屽茍瀹氫箟涓涓娊璞$殑execute鏂規(guī)硶錛岀劧鍚庝負(fù)嫻嬭瘯綾葷殑execute鏂規(guī)硶浼犲叆涓涓?/span>TestExecutor鐨勫疄渚嬶紝騫惰皟鐢ㄨ瀹炰緥鐨?/span>execute鏂規(guī)硶銆傛渶鍚庯紝鎴戜滑鐨勬祴璇曟柟娉曚腑鍙渶瑕?/span>new涓涓?/span>TestExecutor錛屽茍鍦?/span>execute鏂規(guī)硶涓疄鐜版祴璇曢昏緫錛屼究鍙互鎸夌収棰勬湡鐨勬柟寮忔墽琛岋細(xì)鍑嗗嫻嬭瘯鐜-鎵ц嫻嬭瘯閫昏緫-娓呴櫎嫻嬭瘯鏁版嵁銆傝繖渚挎槸涓涓吀鍨嬬殑鍥炶皟鏂規(guī)硶妯″紡鐨勫簲鐢紒
妯℃澘鏂規(guī)硶鍜屽洖璋冨嚱鏁版ā寮忚璧鋒潵鎸烘?zhèn)Q屽叾瀹炰篃灝辮繖涔堢畝鍗曪紝鏄庣櫧浜嗗惂錛氾級(jí)
涓夈?/font> 濡備綍涓烘瘡涓祴璇曟柟娉曞崟鐙彁渚涚幆澧冩柟娉曞憿錛?/span>
閫氳繃鍓嶉潰鐨勮瑙o紝鐩鎬俊澶у瀵規(guī)ā鏉挎柟娉曞拰鍥炶皟鍑芥暟妯″紡閮藉凡緇忔帉鎻′簡錛岃繖閲岀洿鎺ョ粰鍑虹浉鍏充唬鐮侊細(xì)
/** * DAL灞傛祴璇曟敮鎸佺被. * * * 闄ら潪鐗規(guī)畩鎯呭喌,鎵鏈塂AO閮借緇ф壙姝ょ被. * * @author tao.youzt */ public abstract class GodzillaDalTestSupport extends AbstractDependencyInjectionSpringContextTests { /* * @see org.springframework.test.AbstractDependencyInjectionSpringContextTests#getConfigLocations() */ @Override protected final String[] getConfigLocations() { String[] configLocations = null; String[] customConfigLocations = getCustomConfigLocations(); if (customConfigLocations != null && customConfigLocations.length > 0) { configLocations = new String[customConfigLocations.length + 2]; configLocations[0] = "classpath:godzilla/dal/godzilla-db-test.xml"; configLocations[1] = "classpath:godzilla/dal/godzilla-dao.xml"; for (int i = 2; i < configLocations.length; i++) { configLocations[i] = customConfigLocations[i - 2]; } return configLocations; } else { return new String[] { "classpath:godzilla/dal/godzilla-db-test.xml", "classpath:godzilla/dal/godzilla-dao.xml" }; } } /** * 瀛愮被鍙互瑕嗙洊璇ユ柟娉曞姞杞戒釜鎬у寲閰嶇疆. * * @return */ protected String[] getCustomConfigLocations() { return null; } /** * 鍑嗗嫻嬭瘯鐜. */ protected void setupEnv() { } /** * 娓呴櫎嫻嬭瘯鏁版嵁. */ protected void cleanEvn() { } /** * 嫻嬭瘯鐢ㄤ緥鎵ц鍣? */ protected abstract class TestExecutor { /** * 鍑嗗嫻嬭瘯鐜 */ public void setupEnv() { } /** * 鎵ц嫻嬭瘯鐢ㄤ緥. */ public abstract void execute(); /** * 娓呴櫎嫻嬭瘯鏁版嵁. */ public void cleanEnv() { } } /** * 鎵ц涓涓祴璇曠敤渚? * * @param executor */ protected final void execute(final TestExecutor executor) { execute(IgnoralType.NONE, executor); } /** * 鎵ц涓涓祴璇曠敤渚? * * @param executor */ protected final void execute(final IgnoralType ignoral, final TestExecutor executor) { switch (ignoral) { case NONE: { setupEnv(); executor.setupEnv(); executor.execute(); executor.cleanEnv(); cleanEvn(); break; } case BOTH: { executor.execute(); break; } case GLOBAL: { executor.setupEnv(); executor.execute(); executor.cleanEnv(); break; } case LOCAL: { setupEnv(); executor.execute(); cleanEvn(); break; } case GLOBAL_S: { executor.setupEnv(); executor.execute(); executor.cleanEnv(); cleanEvn(); break; } case GLOBAL_C: { setupEnv(); executor.setupEnv(); executor.execute(); executor.cleanEnv(); break; } case LOCAL_S: { setupEnv(); executor.execute(); executor.cleanEnv(); cleanEvn(); break; } case LOCAL_C: { setupEnv(); executor.setupEnv(); executor.execute(); cleanEvn(); break; } case BOTH_SETUP: { executor.execute(); executor.cleanEnv(); cleanEvn(); break; } case BOTH_CLEAN: { setupEnv(); executor.setupEnv(); executor.execute(); break; } case GLOBAL_S_LOCAL_C: { executor.setupEnv(); executor.execute(); cleanEvn(); break; } case GLOBAL_C_LOCAL_S: { setupEnv(); executor.execute(); executor.cleanEnv(); break; } } } /** * 蹇界暐綾誨瀷Enum. */ public enum IgnoralType { /** 涓嶅拷鐣ヤ換浣曠幆澧冪浉鍏蟲柟娉?*/ NONE, /** 蹇界暐鍏ㄥ眬鐜鐩稿叧鏂規(guī)硶 */ GLOBAL, /** 蹇界暐灞閮ㄧ幆澧冪浉鍏蟲柟娉?*/ LOCAL, /** 蹇界暐鎵鏈夌幆澧冪浉鍏蟲柟娉?*/ BOTH, /** 蹇界暐鍏ㄥ眬鍑嗗嫻嬭瘯鐜鏂規(guī)硶 */ GLOBAL_S, /** 蹇界暐鍏ㄥ眬娓呴櫎嫻嬭瘯鏁版嵁鏂規(guī)硶 */ GLOBAL_C, /** 蹇界暐灞閮ㄥ噯澶囨祴璇曠幆澧冩柟娉?*/ LOCAL_S, /** 蹇界暐灞閮ㄦ竻闄ゆ祴璇曟暟鎹柟娉?*/ LOCAL_C, /** 蹇界暐鍏ㄩ儴鍑嗗嫻嬭瘯鐜鏂規(guī)硶 */ BOTH_SETUP, /** 蹇界暐鍏ㄩ儴娓呮嫻嬭瘯鏁版嵁鏂規(guī)硶 */ BOTH_CLEAN, /** 蹇界暐鍏ㄥ眬鍑嗗嫻嬭瘯鐜鍜屽眬閮ㄦ竻闄ゆ祴璇曟暟鎹柟娉?*/ GLOBAL_S_LOCAL_C, /** 蹇界暐鍏ㄥ眬娓呴櫎嫻嬭瘯鏁版嵁鍜屽眬閮ㄥ噯澶囨祴璇曠幆澧冩柟娉?*/ GLOBAL_C_LOCAL_S } }
/** * URL DAO嫻嬭瘯綾? * * @author tao.youzt */ public class TestBizUrlDAO extends GodzillaDalTestSupport { private BizUrlDAO bizUrlDAO; @Override protected void setupEnv() { bizUrlDAO.delete("www.easyjf.com"); } @Override protected void cleanEvn() { bizUrlDAO.delete("www.easyjf.com"); } /** * 嫻嬭瘯鎻掑叆涓鏉℃柊鏁版嵁. */ public void testInsert() { execute(new TestExecutor() { @Override public void execute() { bizUrlDAO.insert(generateDO()); assertNotNull(bizUrlDAO.getByUrl("www.easyjf.com")); } }); } /** * 嫻嬭瘯閲嶅鎻掑叆鏁版嵁鐨勬儏鍐? */ public void testDuplicateInsert() { execute(new TestExecutor() { @Override public void setupEnv() { bizUrlDAO.insert(generateDO()); } @Override public void execute() { try { bizUrlDAO.insert(generateDO()); assertTrue("Must throw an exception!", false); } catch (Exception e) { assertTrue("Expect this exception.", true); } } }); } /** * 嫻嬭瘯鍒犻櫎涓鏉″凡緇忓瓨鍦ㄧ殑鏁版嵁. */ public void testDelete() { execute(IgnoralType.GLOBAL_C, new TestExecutor() { @Override public void execute() { assertNotNull(bizUrlDAO.getByUrl("www.easyjf.com")); bizUrlDAO.delete("www.easyjf.com"); assertNull(bizUrlDAO.getByUrl("www.easyjf.com")); } @Override public void setupEnv() { bizUrlDAO.insert(generateDO()); } }); } /** * 鐢熸垚涓涓敤浜庢祴璇曠殑DO. * * @return */ private BizUrlSynchronizeDO generateDO() { BizUrlDO bizUrlDO = new BizUrlDO(); bizUrlDO.setUrl("www.easyjf.com"); bizUrlDO.setName("EasyJWeb"); bizUrlDO.setEmail("webmaster@easyjf.com"); return bizUrlDO; } public void setBizUrlDAO(BizUrlSynchronzieDAO bizUrlDAO) { this.bizUrlDAO = bizUrlDAO; } }
娉ㄦ剰testDeleate()鏂規(guī)硶錛屾垜浠紶鍏ヤ簡涓や釜鍙傛暟錛岀涓涓弬鏁?/span>IgnoralType.GLOBAL_C 浠h〃蹇界暐鍝釜鏂規(guī)硶錛屾湁12縐嶇被鍨嬪彲浠ヨ緗?/span>GLOBAL_C浠h〃蹇界暐鍏ㄥ眬鐨勬竻闄ゆ祴璇曟暟鎹柟娉曪紝鍏朵粬瑙佷唬鐮佹敞閲娿?/span>