Cobertura 鏄竴縐嶅紑婧愬伐鍏鳳紝瀹冮氳繃媯嫻嬪熀鏈殑浠g爜錛屽茍瑙傚療鍦ㄦ祴璇曞寘榪愯鏃舵墽琛屼簡鍝簺浠g爜鍜屾病鏈夋墽琛屽摢浜涗唬鐮侊紝鏉ユ祴閲忔祴璇曡鐩栫巼銆傞櫎浜嗘壘鍑烘湭嫻嬭瘯鍒扮殑浠g爜騫跺彂鐜?bug 澶栵紝Cobertura 榪樺彲浠ラ氳繃鏍囪鏃犵敤鐨勩佹墽琛屼笉鍒扮殑浠g爜鏉ヤ紭鍖栦唬鐮侊紝榪樺彲浠ユ彁渚?API 瀹為檯鎿嶄綔鐨勫唴閮ㄤ俊鎭侲lliotte Rusty Harold 灝嗕笌鎮ㄥ垎浜浣曞埄鐢ㄤ唬鐮佽鐩栫巼鐨勬渶浣沖疄璺墊潵浣跨敤 Cobertura銆?/BLOCKQUOTE>
灝界嫻嬭瘯鍏堣緙栫▼錛坱est-first programming錛夊拰鍗曞厓嫻嬭瘯宸蹭笉鑳界畻鏄柊姒傚康錛屼絾嫻嬭瘯椹卞姩鐨勫紑鍙戜粛鐒舵槸榪囧幓 10 騫翠腑鏈閲嶈鐨勭紪紼嬪垱鏂般傛渶濂界殑涓浜涚紪紼嬩漢鍛樺湪榪囧幓鍗婁釜涓栫邯涓竴鐩村湪浣跨敤榪欎簺鎶鏈紝涓嶈繃錛屽彧鏄湪鏈榪戝嚑騫達紝榪欎簺鎶鏈墠琚箍娉涘湴瑙嗕負鍦ㄦ椂闂村強鎴愭湰棰勭畻鍐呭紑鍙戝仴澹殑鏃犵己闄瘋蔣浠剁殑鍏抽敭鎵鍦ㄣ備絾鏄紝嫻嬭瘯椹卞姩鐨勫紑鍙戜笉鑳借秴榪囨祴璇曟墍鑳借揪鍒扮殑紼嬪害銆傛祴璇曟敼榪涗簡浠g爜璐ㄩ噺錛屼絾榪欎篃鍙槸閽堝瀹為檯嫻嬭瘯鍒扮殑閭i儴鍒嗕唬鐮佽岃█鐨勩傛偍闇瑕佹湁涓涓伐鍏峰憡璇夋偍紼嬪簭鐨勫摢浜涢儴鍒嗘病鏈夋祴璇曞埌錛岃繖鏍峰氨鍙互閽堝榪欎簺閮ㄥ垎緙栧啓嫻嬭瘯浠g爜騫舵壘鍑烘洿澶?bug銆?
Mark Doliner 鐨?Cobertura 錛?I>cobertura 鍦ㄨタ鐝墮璇槸瑕嗙洊鐨勬剰鎬濓級鏄畬鎴愯繖欏逛換鍔$殑涓涓厤璐?GPL 宸ュ叿銆侰obertura 閫氳繃鐢ㄩ澶栫殑璇彞璁板綍鍦ㄦ墽琛屾祴璇曞寘鏃訛紝鍝簺琛岃嫻嬭瘯鍒般佸摢浜涜娌℃湁琚祴璇曞埌錛岄氳繃榪欑鏂瑰紡鏉ュ害閲忓瓧鑺傜爜錛屼互渚垮嫻嬭瘯榪涜鐩戣銆傜劧鍚庡畠鐢熸垚涓涓?HTML 鎴栬?XML 鏍煎紡鐨勬姤鍛婏紝鎸囧嚭浠g爜涓殑鍝簺鍖呫佸摢浜涚被銆佸摢浜涙柟娉曞拰鍝簺琛屾病鏈夋祴璇曞埌銆傚彲浠ラ拡瀵硅繖浜涚壒瀹氱殑鍖哄煙緙栧啓鏇村鐨勬祴璇曚唬鐮侊紝浠ュ彂鐜版墍鏈夐殣钘忕殑 bug銆?
闃呰 Cobertura 杈撳嚭
鎴戜滑棣栧厛鏌ョ湅鐢熸垚鐨?Cobertura 杈撳嚭銆傚浘 1 鏄劇ず浜嗗 Jaxen 嫻嬭瘯鍖呰繍琛?Cobertura 鐢熸垚鐨勬姤鍛婏紙璇峰弬闃?鍙傝冭祫鏂?/FONT>錛夈備粠璇ユ姤鍛婁腑錛屽彲浠ョ湅鍒頒粠寰堝ソ錛堝湪 org.jaxen.expr.iter
鍖呬腑鍑犱箮鏄?100%錛夊埌鏋佸樊錛堝湪 org.jaxen.dom.html
涓畬鍏ㄦ病鏈夎鐩栵級鐨勮鐩栫巼緇撴灉銆?/P>
鍥?1. Jaxen 鐨勫寘綰у埆瑕嗙洊鐜囩粺璁℃暟鎹?/B>
Cobertura 閫氳繃琚祴璇曠殑琛屾暟鍜岃嫻嬭瘯鐨勫垎鏀暟鏉ヨ綆楄鐩栫巼銆傜涓嬈℃祴璇曟椂錛屼袱縐嶆祴璇曟柟娉曚箣闂寸殑宸埆騫朵笉鏄緢閲嶈銆侰obertura 榪樹負綾昏綆楀鉤鍧?McCabe 澶嶆潅搴︼紙璇峰弬闃?鍙傝冭祫鏂?/FONT>錛夈?/P>
鍙互娣卞叆鎸栨帢 HTML 鎶ュ憡錛屼簡瑙g壒瀹氬寘鎴栬呯被鐨勮鐩栫巼銆傚浘 2 鏄劇ず浜?org.jaxen.function
鍖呯殑瑕嗙洊鐜囩粺璁°傚湪榪欎釜鍖呬腑錛岃鐩栫巼鐨勮寖鍥翠粠 SumFunction
綾葷殑 100% 鍒?IdFunction
綾葷殑浠呬負 5%銆?/P>
鍥?2. org.jaxen.function 鍖呬腑鐨勪唬鐮佽鐩栫巼
榪涗竴姝ユ繁鍏ュ埌鍗曠嫭鐨勭被涓紝鍏蜂綋鏌ョ湅鍝竴琛屼唬鐮佹病鏈夋祴璇曞埌銆傚浘 3 鏄劇ず浜?NameFunction
綾諱腑鐨勯儴鍒嗚鐩栫巼銆傛渶宸﹁竟涓鏍忔樉紺鴻鍙楓傚悗涓鏍忔樉紺轟簡鎵ц嫻嬭瘯鏃惰繖涓琛岃鎵ц鐨勬鏁般傚彲浠ョ湅鍑猴紝絎?112 琛岃鎵ц浜?100 嬈★紝絎?114 琛岃鎵ц浜?28 嬈°傜敤綰㈣壊紿佸嚭鏄劇ず鐨勯偅浜涜鍒欐牴鏈病鏈夋祴璇曞埌銆傝繖涓姤鍛婅〃鏄庯紝铏界劧浠庢諱綋涓婅璇ユ柟娉曡嫻嬭瘯鍒頒簡錛屼絾瀹為檯涓婅繕鏈夎澶氬垎鏀病鏈夋祴璇曞埌銆?
鍥?3. NameFunction 綾諱腑鐨勪唬鐮佽鐩栫巼
 |
Cobertura 鏄?jcoverage 鐨勫垎鏀紙璇峰弬闃?鍙傝冭祫鏂?/FONT>錛夈侴PL 鐗堟湰鐨?jcoverage 宸茬粡鏈変竴騫存病鏈夋洿鏂拌繃浜嗭紝騫朵笖鏈変竴浜涢暱鏈熷瓨鍦ㄧ殑 bug錛孋obertura 淇浜嗚繖浜?bug銆傚師鏉ョ殑閭d簺 jcoverage 寮鍙戜漢鍛樹笉鍐嶇戶緇紑鍙戝紑鏀炬簮鐮侊紝浠栦滑杞悜寮鍙?jcoverage 鐨勫晢涓氱増鍜?jcoverage+錛宩coverage+ 鏄竴涓粠鍚屼竴浠g爜鍩虹涓彂灞曞嚭鏉ョ殑灝侀棴婧愪唬鐮佷駭鍝併傚紑鏀炬簮鐮佺殑濂囧涔嬪鍦ㄤ簬錛氫竴涓駭鍝佷笉浼氬洜涓哄師寮鍙戜漢鍛樺喅瀹氳浠栦滑鐨勫伐浣滆幏寰楃浉搴旂殑鎶ラ叕鑰屾秷浜°? | |
紜閬楁紡鐨勬祴璇?/FONT>
鍒╃敤 Cobertura 鎶ュ憡錛屽彲浠ユ壘鍑轟唬鐮佷腑鏈祴璇曠殑閮ㄥ垎騫墮拡瀵瑰畠浠紪鍐欐祴璇曘備緥濡傦紝鍥?3 鏄劇ず Jaxen 闇瑕佽繘琛屼竴浜涙祴璇曪紝榪愮敤 name()
鍑芥暟瀵規枃瀛楄妭鐐廣佹敞閲婅妭鐐廣佸鐞嗘寚浠よ妭鐐廣佸睘鎬ц妭鐐瑰拰鍚嶇О絀洪棿鑺傜偣榪涜嫻嬭瘯銆?
濡傛灉鏈夎澶氭湭瑕嗙洊鐨勪唬鐮侊紝鍍?Cobertura 鍦ㄨ繖閲屾姤鍛婄殑閭f牱錛岄偅涔堟坊鍔犳墍鏈夌己灝戠殑嫻嬭瘯灝嗕細闈炲父鑰楁椂錛屼絾涔熸槸鍊煎緱鐨勩備笉涓瀹氳涓嬈″畬鎴愬畠銆傛偍鍙互浠庤嫻嬭瘯鐨勬渶灝戠殑浠g爜寮濮嬶紝姣斿閭d簺鎵鏈夋病鏈夎鐩栫殑鍖呫傚湪嫻嬭瘯鎵鏈夌殑鍖呬箣鍚庯紝灝卞彲浠ュ姣忎竴涓樉紺轟負娌℃湁瑕嗙洊鐨勭被緙栧啓涓浜涙祴璇曚唬鐮併傚鎵鏈夌被榪涜涓撻棬嫻嬭瘯鍚庯紝榪樿涓烘墍鏈夋湭瑕嗙洊鐨勬柟娉曠紪鍐欐祴璇曚唬鐮併傚湪嫻嬭瘯鎵鏈夋柟娉曚箣鍚庯紝灝卞彲浠ュ紑濮嬪垎鏋愬鏈祴璇曠殑璇彞榪涜嫻嬭瘯鐨勫繀瑕佹с?
錛堝嚑涔庯級涓嶇暀涓嬩換浣曟湭嫻嬭瘯鐨勪唬鐮?/FONT>
鏄惁鏈変竴浜涘彲浠ユ祴璇曚絾涓嶅簲嫻嬭瘯鐨勫唴瀹癸紵榪欏彇鍐充簬鎮ㄩ棶鐨勬槸璋併傚湪 JUnit FAQ 涓紝J. B. Rainsberger 鍐欏埌鈥滀竴鑸殑鐪嬫硶鏄細濡傛灉 鑷韓 涓嶄細鍑洪棶棰橈紝閭d箞瀹冧細鍥犱負澶畝鍗曡屼笉浼氬嚭闂銆傜涓涓緥瀛愭槸 getX()
鏂規硶銆傚亣瀹?getX()
鏂規硶鍙彁渚涙煇涓瀹炰緥鍙橀噺鐨勫箋傚湪榪欑鎯呭喌涓嬶紝闄ら潪緙栬瘧鍣ㄦ垨鑰呰В閲婂櫒鍑轟簡闂錛屽惁鍒?getX()
鏄笉浼氬嚭闂鐨勩傚洜姝わ紝涓嶇敤嫻嬭瘯 getX()
錛屾祴璇曞畠涓嶄細甯︽潵浠諱綍濂藉銆傚浜?setX()
鏂規硶鏉ヨ涔熸槸濡傛錛屼笉榪囷紝濡傛灉 setX()
鏂規硶紜疄瑕佽繘琛屼換浣曞弬鏁伴獙璇侊紝鎴栬呰紜疄鏈夊壇浣滅敤錛岄偅涔堣繕鏄湁蹇呰瀵瑰叾榪涜嫻嬭瘯銆傗?
 |
鐞嗚涓婏紝瀵規湭瑕嗙洊鐨勪唬鐮佺紪鍐欐祴璇曚唬鐮佷笉涓瀹氬氨浼氬彂鐜?bug銆備絾鍦ㄥ疄璺典腑錛屾垜浠庢潵娌℃湁紕板埌娌℃湁鍙戠幇 bug 鐨勬儏鍐點傛湭嫻嬭瘯鐨勪唬鐮佸厖婊′簡 bug銆傛墍鍋氱殑嫻嬭瘯瓚婂皯錛屽湪浠g爜涓殣钘忕殑銆佹湭鍙戠幇鐨?bug 灝變細瓚婂銆?/P> | |
鎴戜笉鍚屾剰銆傛垜宸茬粡璁頒笉娓呭湪鈥滅畝鍗曞緱涓嶄細鍑洪棶棰樷濈殑浠g爜涓彂鐜扮殑 bug 鐨勬暟閲忎簡銆傜‘瀹烇紝涓浜?getter 鍜?setter 寰堢畝鍗曪紝涓嶅彲鑳藉嚭闂銆備絾鏄垜浠庢潵灝辨病鏈夊姙娉曞尯鍒嗗摢浜涙柟娉曟槸鐪熺殑綆鍗曞緱涓嶄細鍑洪敊錛屽摢浜涙柟娉曞彧鏄湅涓婂幓濡傛銆傜紪鍐欒鐩栧儚 setter 鍜?getter 榪欐牱綆鍗曟柟娉曠殑嫻嬭瘯浠g爜騫朵笉闅俱備負姝ゆ墍鑺辯殑灝戦噺鏃墮棿浼氬洜涓哄湪榪欎簺鏂規硶涓彂鐜版湭鏇鵑鏂欏埌鐨?bug 鑰屽緱鍒拌ˉ鍋褲?
涓鑸潵璇達紝寮濮嬫祴閲忓悗錛岃揪鍒?90% 鐨勬祴璇曡鐩栫巼鏄緢瀹規槗鐨勩傚皢瑕嗙洊鐜囨彁楂樺埌 95% 鎴栬呮洿楂樺氨闇瑕佸姩涓涓嬭剳絳嬨備緥濡傦紝鍙兘闇瑕佽杞戒笉鍚岀増鏈殑鏀寔搴擄紝浠ユ祴璇曟病鏈夊湪鎵鏈夌増鏈殑搴撲腑鍑虹幇鐨?bug銆傛垨鑰呴渶瑕侀噸鏂版瀯寤轟唬鐮侊紝浠ヤ究嫻嬭瘯閫氬父鎵ц涓嶅埌鐨勯儴鍒嗕唬鐮併傚彲浠ュ綾昏繘琛屾墿灞曪紝璁╁畠浠殑鍙椾繚鎶ゆ柟娉曞彉涓哄叕鍏辨柟娉曪紝榪欐牱灝卞彲浠ュ榪欎簺鏂規硶榪涜嫻嬭瘯銆傝繖浜涙妧宸х湅璧鋒潵鍍忔槸澶氭涓涓撅紝浣嗘槸瀹冧滑鏇懼府鍔╂垜鍦ㄤ竴鍗婄殑鏃墮棿鍐呭彂鐜版洿澶氱殑鏈彂鐜扮殑 bug銆?
騫朵笉鎬繪槸鍙互寰楀埌瀹岀編鐨勩?00% 鐨勪唬鐮佽鐩栫巼銆傛湁鏃舵偍浼氬彂鐜幫紝涓嶇瀵逛唬鐮佸浣曟敼閫狅紝浠嶇劧鏈変竴浜涜銆佹柟娉曘佺敋鑷蟲槸鏁翠釜綾繪槸嫻嬭瘯涓嶅埌鐨勩備笅闈㈡槸鎮ㄥ彲鑳戒細閬囧埌鐨勬寫鎴樼殑涓浜涗緥瀛愶細
- 鍙湪鐗瑰畾騫沖彴涓婃墽琛岀殑浠g爜銆備緥濡傦紝鍦ㄤ竴涓璁¤壇濂界殑 GUI 搴旂敤紼嬪簭涓紝娣誨姞涓涓?Exit 鑿滃崟欏圭殑浠g爜鍙互鍦?Windows PC 涓婅繍琛岋紝浣嗗畠涓嶈兘鍦?Mac 鏈轟笂榪愯銆?BR>
- 鎹曡幏涓嶄細鍙戠敓鐨勫紓甯哥殑
catch
璇彞錛屾瘮濡傚湪浠?ByteArrayInputStream
榪涜璇誨彇鎿嶄綔鏃舵姏鍑虹殑 IOException
銆?BR>
- 闈炲叕鍏辯被涓殑涓浜涙柟娉曪紝瀹冧滑姘歌繙涔熶笉浼氳瀹為檯璋冪敤錛屽彧鏄負浜嗘弧瓚蟲煇涓帴鍙e綰﹁屽繀欏誨疄鐜般?BR>
- 澶勭悊铏氭嫙鏈?bug 鐨勪唬鐮佸潡錛屾瘮濡傝錛屼笉鑳借瘑鍒?UTF-8 緙栫爜銆?
鑰冭檻鍒頒笂闈㈣繖浜涗互鍙婄被浼肩殑鎯呭喌錛屾垜璁や負涓浜涙瀬闄愮▼搴忓憳鑷姩鍒犻櫎鎵鏈夋湭嫻嬭瘯浠g爜鐨勫仛娉曟槸涓嶅垏瀹為檯鐨勶紝騫朵笖鍙兘鍏鋒湁涓瀹氱殑璁藉埡鎬с備笉鑳芥繪槸鑾峰緱緇濆瀹岀編鐨勬祴璇曡鐩栫巼騫朵笉鎰忓懗鐫灝變笉浼氭湁鏇村ソ鐨勮鐩栫巼銆?
鐒惰岋紝姣旀墽琛屼笉鍒扮殑璇彞鍜屾柟娉曟洿甯歌鐨勬槸孌嬬暀浠g爜錛屽畠涓嶅啀鏈変換浣曚綔鐢紝騫朵笖浠庝唬鐮佸熀涓幓鎺夎繖浜涗唬鐮佷篃涓嶄細浜х敓浠諱綍褰卞搷銆傛湁鏃跺彲浠ラ氳繃浣跨敤鍙嶅皠鏉ヨ闂鏈夋垚鍛樿繖鏍風殑鎬嫑鏉ユ祴璇曟湭嫻嬭瘯鐨勪唬鐮併傝繕鍙互涓烘湭嫻嬭瘯鐨勩佸寘淇濇姢錛坧ackage-protected錛夌殑浠g爜鏉ョ紪鍐欐祴璇曚唬鐮侊紝灝嗘祴璇曠被鏀懼埌灝嗚嫻嬭瘯鐨勭被鎵鍦ㄩ偅涓寘涓備絾鏈濂戒笉瑕佽繖鏍峰仛銆傛墍鏈変笉鑳介氳繃鍙戝竷鐨勶紙鍏叡鐨勫拰鍙椾繚鎶ょ殑錛夋帴鍙h闂殑浠g爜閮藉簲鍒犻櫎銆傛墽琛屼笉鍒扮殑浠g爜涓嶅簲褰撴垚涓轟唬鐮佸熀鐨勪竴閮ㄥ垎銆備唬鐮佸熀瓚婂皬錛屽畠灝辮秺瀹規槗琚悊瑙e拰緇存姢銆?
 |
涓嶈婕忔帀嫻嬮噺鍗曞厓嫻嬭瘯鍖呭拰綾繪湰韜傛垜涓嶆涓嬈℃敞鎰忓埌錛屾煇浜涗釜嫻嬭瘯鏂規硶鎴栬呯被娌℃湁琚祴璇曞寘鐪熸榪愯銆傞氬父榪欒〃鏄庡悕縐拌鑼冧腑瀛樺湪闂錛堟瘮濡傚皢涓涓柟娉曞懡鍚嶄負 tesSomeReallyComplexCondition 錛岃屼笉鏄皢鍏跺懡鍚嶄負 testSomeReallyComplexCondition 錛夛紝鎴栬呭繕璁板皢涓涓被娣誨姞鍒頒富 suite() 鏂規硶涓傚湪鍏朵粬鎯呭喌涓嬶紝鏈鏈熺殑鏉′歡瀵艱嚧璺寵繃浜嗘祴璇曟柟娉曚腑鐨勪唬鐮併備笉綆℃槸浠涔堟儏鍐碉紝閮芥槸铏界劧宸茬粡緙栧啓浜嗘祴璇曚唬鐮侊紝浣嗘病鏈夌湡姝h繍琛屽畠銆侸Unit 涓嶄細鍛婅瘔鎮ㄥ畠娌℃湁鍍忔偍鎵鎯崇殑閭f牱榪愯鎵鏈夋祴璇曪紝浣嗘槸 Cobertura 浼氬憡璇夋偍銆傛壘鍑轟簡鏈繍琛岀殑嫻嬭瘯鍚庯紝鏀規瀹冧竴鑸緢瀹規槗銆? | |
榪愯 Cobertura
鍦ㄤ簡瑙d簡嫻嬮噺浠g爜瑕嗙洊鐜囩殑濂藉鍚庯紝璁╂垜浠啀鏉ヨ璁轟竴涓嬪浣曠敤 Cobertura 嫻嬮噺浠g爜瑕嗙洊鐜囩殑鍏蜂綋緇嗚妭銆侰obertura 琚璁℃垚涓哄湪 Ant 涓繍琛屻傜幇鍦ㄨ繕娌℃湁榪欐柟闈㈢殑 IDE 鎻掍歡鍙敤錛屼笉榪囦竴涓ゅ勾鍐呬篃璁稿氨浼氭湁浜嗐?
棣栧厛闇瑕佸湪 build.xml 鏂囦歡涓坊鍔犱竴涓換鍔″畾涔夈備互涓嬭繖涓《綰?taskdef
鍏冪礌灝?cobertura.jar 鏂囦歡闄愬畾鍦ㄥ綋鍓嶅伐浣滅洰褰曚腑錛?
<taskdef classpath="cobertura.jar" resource="tasks.properties" />
|
鐒跺悗錛岄渶瑕佷竴涓?cobertura-instrument
浠誨姟錛岃浠誨姟灝嗗湪宸茬粡緙栬瘧濂界殑綾繪枃浠朵腑娣誨姞鏃ュ織浠g爜銆?CODE>todir 灞炴ф寚瀹氬皢嫻嬮噺綾繪斁鍒頒粈涔堝湴鏂廣?CODE>fileset 瀛愬厓绱犳寚瀹氭祴閲忓摢浜?.class 鏂囦歡錛?
<target name="instrument">
<cobertura-instrument todir="target/instrumented-classes">
<fileset dir="target/classes">
<include name="**/*.class"/>
</fileset>
</cobertura-instrument>
</target>
|
鐢ㄩ氬父榪愯嫻嬭瘯鍖呯殑鍚屼竴縐嶇被鍨嬬殑 Ant 浠誨姟榪愯嫻嬭瘯銆傛儫涓鐨勫尯鍒湪浜庯細琚祴閲忕殑綾誨繀欏誨湪鍘熷綾誨嚭鐜板湪綾昏礬寰勪腑涔嬪墠鍑虹幇鍦ㄧ被璺緞涓紝鑰屼笖闇瑕佸皢 Cobertura JAR 鏂囦歡娣誨姞鍒扮被璺緞涓細
<target name="cover-test" depends="instrument">
<mkdir dir="${testreportdir}" />
<junit dir="./" failureproperty="test.failure" printSummary="yes"
fork="true" haltonerror="true">
<!-- Normally you can create this task by copying your existing JUnit
target, changing its name, and adding these next two lines.
You may need to change the locations to point to wherever
you've put the cobertura.jar file and the instrumented classes. -->
<classpath location="cobertura.jar"/>
<classpath location="target/instrumented-classes"/>
<classpath>
<fileset dir="${libdir}">
<include name="*.jar" />
</fileset>
<pathelement path="${testclassesdir}" />
<pathelement path="${classesdir}" />
</classpath>
<batchtest todir="${testreportdir}">
<fileset dir="src/java/test">
<include name="**/*Test.java" />
<include name="org/jaxen/javabean/*Test.java" />
</fileset>
</batchtest>
</junit>
</target>>
|
Jaxen 欏圭洰浣跨敤 JUnit 浣滀負鍏舵祴璇曟鏋訛紝浣嗘槸 Cobertura 鏄笉鍙楁鏋跺獎鍝嶇殑銆傚畠鍦?TestNG銆丄rtima SuiteRunner銆丠TTPUni 鎴栬呭湪鎮ㄨ嚜宸卞湪鍦頒笅瀹ゅ紑鍙戠殑緋葷粺涓竴鏍峰伐浣滃緱寰堝ソ銆?/P>
鏈鍚庯紝cobertura-report
浠誨姟鐢熸垚鏈枃寮濮嬮儴鍒嗙湅鍒扮殑閭d釜 HTML 鏂囦歡錛?
<target name="coverage-report" depends="cover-test">
<cobertura-report srcdir="src/java/main" destdir="cobertura"/>
</target>
|
srcdir
灞炴ф寚瀹氬師濮嬬殑 .java 婧愪唬鐮佸湪浠涔堝湴鏂廣?CODE>destdir 灞炴ф寚瀹?Cobertura 鏀劇疆杈撳嚭 HTML 鐨勯偅涓洰褰曠殑鍚嶇О銆?/P>
鍦ㄨ嚜宸辯殑 Ant 緙栬瘧鏂囦歡涓姞鍏ヤ簡綾諱技鐨勪換鍔″悗錛屽氨鍙互閫氳繃閿叆浠ヤ笅鍛戒護鏉ョ敓鎴愪竴涓鐩栨姤鍛婏細
% ant instrument
% ant cover-test
% ant coverage-report
|
褰撶劧錛屽鏋滄偍鎰挎剰鐨勮瘽錛岃繕鍙互鏀瑰彉鐩爣浠誨姟鐨勫悕縐幫紝鎴栬呭皢榪欎笁欏逛換鍔″悎騫朵負涓涓洰鏍囦換鍔°?
緇撴潫璇?/FONT>
Cobertura 鏄晱鎹風▼搴忓憳宸ュ叿綆變腑鏂板鐨勪竴涓噸瑕佸伐鍏楓傞氳繃鐢熸垚浠g爜瑕嗙洊鐜囩殑鍏蜂綋鏁板鹼紝Cobertura 灝嗗崟鍏冩祴璇曚粠涓縐嶈壓鏈漿鍙樹負涓闂ㄧ瀛︺傚畠鍙互瀵繪壘嫻嬭瘯瑕嗙洊涓殑絀洪殭錛岀洿鎺ユ壘鍒?bug銆傛祴閲忎唬鐮佽鐩栫巼浣挎偍鍙互鑾峰緱瀵繪壘騫朵慨澶?bug 鎵闇鐨勪俊鎭紝浠庤屽紑鍙戝嚭瀵規瘡涓漢鏉ヨ閮芥洿鍋ュ.鐨勮蔣浠躲?
鍙傝冭祫鏂?
- 鎮ㄥ彲浠ュ弬闃呮湰鏂囧湪 developerWorks 鍏ㄧ悆绔欑偣涓婄殑 鑻辨枃鍘熸枃銆?BR>
- 浠?SourceForge 涓嬭澆 Cobertura銆?BR>
- 鑾峰緱 JUnit 鍙楀獎鍝嶇殑嫻嬭瘯錛屽畠鏄敤浜?Java 騫沖彴鐨勫疄闄呮爣鍑嗗崟鍏冩祴璇曟鏋躲?BR>
- 闃呰 Dave Thomas 鍜?Andy Hunt 鍚堣憲鐨?Pragmatic Unit Testing in Java With JUnit 錛圥ragmatic Bookshelf錛?003錛夈?BR>
- Cenqua 鐨?Clover 鏄竴涓洿綺捐嚧鐨勩佹敹璐圭殑嫻嬭瘯瑕嗙洊鐜囧伐鍏鳳紝瀹冩墍鍋氱殑宸ヤ綔瀹炶川涓婁笌 Cobertura 鐩稿悓錛屽彧鏄畠鍋氬緱鏇寸粏鑷翠竴浜涖?BR>
- IBM Rational 鎻愪緵浜嗗叏闈㈢殑嫻嬭瘯宸ュ叿鍖呮潵甯姪鎮ㄦ嫻嬩唬鐮併傗?A >Get started with automated testing: Road map to success鈥濅負鎮ㄦ彁渚涗簡鍗沖埢寮濮嬫祴璇曡嚜宸辯殑浠g爜鎵闇鐨勫熀紜鐭ヨ瘑銆?
- Mike Kelly 鎻愪緵浜嗏?A >using TestManager to report test coverage鈥濈殑緇嗚妭錛坉eveloperWorks錛?003 騫?12 鏈堬級銆?BR>
- PureCoverage 鏄?IBM Rational PurifyPlus 嫻嬭瘯宸ュ叿鍖呯殑涓閮ㄥ垎錛屽畠鏄竴涓嚭鑹茬殑浠g爜瑕嗙洊鐜囧伐鍏楓俁ational Application Developor 鍖呮嫭 PureCoverage 鍔熻兘錛屼粠鈥?A >浣跨敤 IBM Rational Application Developer for WebSphere Software 榪涜緇勪歡嫻嬭瘯鈥濅腑鍙互浜嗚В鍏充簬瀹冪殑鏇村鐭ヨ瘑錛坉eveloperWorks錛?005 騫?3 鏈堬級銆?BR>
- Cobertura 鏄?jcoverage 鐨勫垎鏀?
- Carnegie Mellon 鐨?Software Engineering Institute 鍙戣〃浜嗗 McCabe's Cyclomatic Complexity 鐨勮緇嗚鏄庛?BR>
- David Carew 鍜?Sandeep Desai 鍚堣憲鐨?鈥?A >Keeping critters out of your code: How to use WebSphere and JUnit to prevent programming bugs鈥濓紙developerWorks錛?003 騫?6 鏈堬級 鍒嗘瀽浜嗗浣曠敤 XP 鏂規硶榪涜嫻嬭瘯銆?BR>
- Dennis M. Sosnoski 鎺ㄥ嚭 浜?Classworking 宸ュ叿綆?/FONT> 緋誨垪錛屾帰璁ㄥ紑婧愮殑 Hansel 鍜?Gretel 浠g爜瑕嗙洊鐜囧伐鍏楓?BR>
- 鍙傞槄鈥?A >Test your tests with Jester鈥濓紝浜嗚В鍏充簬寮鏀炬簮浠g爜 JUnit 嫻嬭瘯嫻嬭瘯鍣ㄧ殑鐭ヨ瘑銆?BR>
- Malcolm Davis 鎾板啓鐨勨?A >鍒╃敤 Ant 鍜?JUnit 榪涜澧為噺寮鍙?/FONT>鈥濓紙developerWorks錛?000 騫?11 鏈堬級浠嬬粛浜嗗浣曞皢 JUnit 闆嗘垚鍒拌嚜宸辯殑欏圭洰涓?BR>
- Eric Allen 鍜?Roy Miller 鍦ㄤ粬浠悇鑷殑涓撴爮 璇婃柇 Java 浠g爜 鍜?Demystifying Extreme Programming 涓粡甯歌璁哄埌鍗曞厓嫻嬭瘯銆?BR>
- Erik Hatcher 鐨?璁╃紪璇戝拰嫻嬭瘯榪囩▼鑷姩鍖?/FONT> 錛坉eveloperWorks錛?001 騫?8 鏈堬級灞曠ず浜嗗浣曞皢澧為噺嫻嬭瘯鍜岃繛緇紪璇戠粨鍚堝埌涓涓嚜鍔ㄨ繃紼嬩腑銆?BR>
- 鎺㈢儲 FoCuS錛岃繖鏄?IBM alphaWorks 鐨勪竴涓伐鍏鳳紝瀹冨疄鐜頒簡鍔熻兘瑕嗙洊鏂規硶錛屽茍閫氳繃鎻愪緵鏈祴璇曞尯鍩熺殑璇︾粏瑕嗙洊鐜囦俊鎭潵鏀硅繘搴旂敤紼嬪簭嫻嬭瘯銆?BR>
- 浣滀負鏈枃鍒嗘瀽瀵硅薄鐨?Jaxen 欏圭洰 鏄竴涓敤浜?Java 緙栫▼鐨勫紑婧?XPath 寮曟搸錛岄傚悎澶氱涓嶅悓瀵硅薄妯″瀷銆?
- 鍦?developerWorks 鐨?Java 鎶鏈笓鍖?/FONT> 涓彲浠ユ壘鍒板叧浜?Java 緙栫▼鐨勫悇涓柟闈㈢殑鏂囩珷銆?BR>
- 璇峰弬闃?Developer Bookstore錛屼互鑾峰緱涓浜涙妧鏈功綾嶇殑瀹屾暣娓呭崟錛屽叾涓寘鎷暟鐧炬湰 Java 鐩稿叧涓婚 鐨勪功綾嶃?BR>
 |
鍏充簬浣滆?/FONT>
 |
|
Elliotte Rusty Harold 鍑虹敓鍦ㄦ柊濂ュ皵鑹紝鐜板湪浠栬繕瀹氭湡鍥炶佸鍠濅竴紕楃編鍛崇殑縐嬭懙姹ゃ備笉榪囩洰鍓嶏紝浠栧拰濡誨瓙 Beth 瀹氬眳鍦ㄧ航綰︿復榪戝竷椴佸厠鏋楃殑 Prospect Heights錛屽悓浣忕殑榪樻湁浠栫殑鐚挭 Charm錛堝彇鑷じ鍏嬶級鍜?Marjorie錛堝彇鑷粬宀蟲瘝鐨勫悕瀛楋級銆備粬鏄?Polytechnic 澶у璁$畻鏈虹瀛︾殑鍓暀鎺堬紝璁叉巿 Java 鎶鏈拰闈㈠悜瀵硅薄緙栫▼銆備粬鐨?Cafe au Lait 緗戠珯鏄?Internet 涓婃渶鍙楁榪庣殑鐙珛 Java 绔欑偣涔嬩竴錛屽濡圭珯鐐?Cafe con Leche 宸茬粡鎴愪負鏈鍙楁榪庣殑 XML 绔欑偣涔嬩竴銆備粬鐨勮憲浣滃寘鎷?Effective XML 銆?A > Processing XML with Java 銆?A > Java Network Programming 鍜?The XML 1.1 Bible 銆傜洰鍓嶄粬姝e湪浠庝簨 XML 鐨?XOM API銆?A >Jaxen XPath 寮曟搸鍜?Jester 嫻嬭瘯瑕嗙洊鐜囧伐鍏風殑寮鍙戝伐浣溿? |