锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲AV无码一区二区三区牛牛,亚洲欧洲日产国码在线观看,亚洲精品资源在线http://m.tkk7.com/justuszhang2009/category/48859.htmlzh-cnFri, 24 Jun 2011 21:59:58 GMTFri, 24 Jun 2011 21:59:58 GMT60銆愯漿銆戝崟鍏冩祴璇曞埄鍣?JUnit 4http://m.tkk7.com/justuszhang2009/archive/2011/06/24/352430.html寮犵泭鍒?/dc:creator>寮犵泭鍒?/author>Fri, 24 Jun 2011 05:06:00 GMThttp://m.tkk7.com/justuszhang2009/archive/2011/06/24/352430.htmlhttp://m.tkk7.com/justuszhang2009/comments/352430.htmlhttp://m.tkk7.com/justuszhang2009/archive/2011/06/24/352430.html#Feedback0http://m.tkk7.com/justuszhang2009/comments/commentRss/352430.htmlhttp://m.tkk7.com/justuszhang2009/services/trackbacks/352430.html寮曡█

姣嬪焊緗枒錛岀▼搴忓憳瑕佸鑷繁緙栧啓鐨勪唬鐮佽礋璐o紝鎮ㄤ笉浠呰淇濊瘉瀹冭兘閫氳繃緙栬瘧錛屾甯稿湴榪愯錛岃屼笖瑕佹弧瓚抽渶姹傚拰璁捐棰勬湡鐨勬晥鏋溿傚崟鍏冩祴璇曟鏄獙璇佷唬鐮佽涓烘槸鍚︽弧瓚抽鏈熺殑鏈夋晥鎵嬫涔嬩竴銆備絾涓嶅彲鍚﹁錛屽仛嫻嬭瘯鏄歡寰堟灟鐕ユ棤瓚g殑浜嬫儏錛岃屼竴閬嶅張涓閬嶇殑嫻嬭瘯鍒欐洿鏄浜虹敓鐣忕殑宸ヤ綔銆傚垢榪愮殑鏄紝鍗曞厓嫻嬭瘯宸ュ叿 JUnit 浣胯繖涓鍒囧彉寰楃畝鍗曡壓鏈搗鏉ャ?/p>

JUnit 鏄?Java 紺懼尯涓煡鍚嶅害鏈楂樼殑鍗曞厓嫻嬭瘯宸ュ叿銆傚畠璇炵敓浜?1997 騫達紝鐢?Erich Gamma 鍜?Kent Beck 鍏卞悓寮鍙戝畬鎴愩傚叾涓?Erich Gamma 鏄粡鍏歌憲浣溿婅璁℃ā寮忥細鍙鐢ㄩ潰鍚戝璞¤蔣浠剁殑鍩虹銆嬩竴涔︾殑浣滆呬箣涓錛屽茍鍦?Eclipse 涓湁寰堝ぇ鐨勮礎鐚紱Kent Beck 鍒欐槸涓浣嶆瀬闄愮紪紼嬶紙XP錛夋柟闈㈢殑涓撳鍜屽厛椹便?/p>

楹婚泙铏藉皬錛屼簲鑴忎勘鍏ㄣ侸Unit 璁捐鐨勯潪甯稿皬宸э紝浣嗘槸鍔熻兘鍗撮潪甯稿己澶с侻artin Fowler 濡傛璇勪環 JUnit錛氬湪杞歡寮鍙戦鍩燂紝浠庢潵灝辨病鏈夊姝ゅ皯鐨勪唬鐮佽搗鍒頒簡濡傛閲嶈鐨勪綔鐢ㄣ傚畠澶уぇ綆鍖栦簡寮鍙戜漢鍛樻墽琛屽崟鍏冩祴璇曠殑闅懼害錛岀壒鍒槸 JUnit 4 浣跨敤 Java 5 涓殑娉ㄨВ錛坅nnotation錛変嬌嫻嬭瘯鍙樺緱鏇村姞綆鍗曘?/p>


JUnit 4 鍒濅綋楠?/span>

鍦ㄥ紑濮嬩綋楠?JUnit 4 涔嬪墠錛屾垜浠渶瑕佷互涓嬭蔣浠剁殑鏀寔錛?/p>

  • Eclipse錛氭渶涓烘祦琛岀殑 IDE錛屽畠鍏ㄩ潰闆嗘垚浜?JUnit錛屽茍浠庣増鏈?3.2 寮濮嬫敮鎸?JUnit 4銆傚綋鐒?JUnit 騫朵笉渚濊禆浜庝換浣?IDE銆傛偍鍙互浠?http://www.eclipse.org/ 涓婁笅杞芥渶鏂扮殑 Eclipse 鐗堟湰銆?/li>
  • Ant錛氬熀浜?Java 鐨勫紑婧愭瀯寤哄伐鍏鳳紝鎮ㄥ彲浠ュ湪 http://ant.apache.org/ 涓婂緱鍒版渶鏂扮殑鐗堟湰鍜屼赴瀵岀殑鏂囨。銆侲clipse 涓凡緇忛泦鎴愪簡 Ant錛屼絾鏄湪鎾板啓鏈枃鏃訛紝Eclipse 浣跨敤鐨?Ant 鐗堟湰杈冧綆錛堝繀闇 1.7 鎴栬呬互涓婄増鏈級錛屼笉鑳藉緢濂界殑鏀寔 JUnit 4銆?/li>
  • JUnit錛氬畠鐨勫畼鏂圭綉绔欐槸 http://www.junit.org/銆傛偍鍙互浠庝笂闈㈣幏鍙栧叧浜?JUnit 鐨勬渶鏂版秷鎭傚鏋滄偍鍜屾湰鏂囦竴鏍峰湪 Eclipse 涓嬌鐢?JUnit錛屽氨涓嶅繀鍐嶄笅杞戒簡銆?

棣栧厛涓烘垜浠殑浣撻獙鏂板緩涓涓?Java 宸ョ▼ —— coolJUnit銆傜幇鍦ㄩ渶瑕佸仛鐨勬槸錛屾墦寮欏圭洰 coolJUnit 鐨勫睘鎬ч〉 -> 閫夋嫨“Java Build Path”瀛愰夐」 -> 鐐歸?#8220;Add Library …”鎸夐挳 -> 鍦ㄥ脊鍑虹殑“Add Library”瀵硅瘽妗嗕腑閫夋嫨 JUnit錛?a >鍥?1錛夛紝騫跺湪涓嬩竴欏典腑閫夋嫨鐗堟湰 4.1 鍚庣偣鍑?#8220;Finish”鎸夐挳銆傝繖鏍蜂究鎶?JUnit 寮曞叆鍒板綋鍓嶉」鐩簱涓簡銆?/p>
鍥?1 涓洪」鐩坊鍔?JUnit 搴?/strong>
鍥?1 涓洪」鐩坊鍔?JUnit 搴? src=

璇鋒敞鎰?JDK 鐨勭増鏈?/h2>

JUnit 4.1 鏄熀浜?Java 5 鐨勫崌綰х増鏈紝瀹冧嬌鐢ㄤ簡 Tiger 涓殑寰堝鏂扮壒鎬ф潵綆鍖栧師鏈夌殑浣跨敤鏂瑰紡銆傛鍥犱負濡傛錛屽畠騫朵笉鑳界洿鎺ヨ繍琛屽湪 JDK1.4.x 鐗堟湰涓娿傚鏋滄偍闇瑕佸湪 JDK1.4.x 鐗堟湰浣跨敤 JUnit 鐨勮瘽錛岃浣跨敤 3.8.1 鐗堟湰銆?/p>

鍙互寮濮嬬紪鍐欏崟鍏冩祴璇曚簡鍚楋紵絳夌瓑……錛屾偍鎵撶畻鎶婂崟鍏冩祴璇曚唬鐮佹斁鍦ㄤ粈涔堝湴鏂瑰憿錛熸妸瀹冨拰琚祴璇曚唬鐮佹販鍦ㄤ竴璧鳳紝榪欐樉鐒朵細鐓ф垚娣蜂貢錛屽洜涓哄崟鍏冩祴璇曚唬鐮佹槸涓嶄細鍑虹幇鍦ㄦ渶緇堜駭鍝佷腑鐨勩傚緩璁偍鍒嗗埆涓哄崟鍏冩祴璇曚唬鐮佷笌琚祴璇曚唬鐮佸垱寤哄崟鐙殑鐩綍錛屽茍淇濊瘉嫻嬭瘯浠g爜鍜岃嫻嬭瘯浠g爜浣跨敤鐩稿悓鐨勫寘鍚嶃傝繖鏍鋒棦淇濊瘉浜嗕唬鐮佺殑鍒嗙錛屽悓鏃惰繕淇濊瘉浜嗘煡鎵劇殑鏂逛究銆傞伒鐓ц繖鏉″師鍒欙紝鎴戜滑鍦ㄩ」鐩?coolJUnit 鏍圭洰褰曚笅娣誨姞涓涓柊鐩綍 testsrc錛屽茍鎶婂畠鍔犲叆鍒伴」鐩簮浠g爜鐩綍涓紙鍔犲叆鏂瑰紡瑙?鍥?2錛夈?/p>
鍥?2 淇敼欏圭洰婧愪唬鐮佺洰褰?/strong>
鍥?2 淇敼欏圭洰婧愪唬鐮佺洰褰? src=

鐜板湪鎴戜滑寰楀埌浜嗕竴鏉?JUnit 鐨勬渶浣沖疄璺碉細鍗曞厓嫻嬭瘯浠g爜鍜岃嫻嬭瘯浠g爜浣跨敤涓鏍風殑鍖咃紝涓嶅悓鐨勭洰褰曘?/p>

涓鍒囧噯澶囧氨緇紝涓璧峰紑濮嬩綋楠屽浣曚嬌鐢?JUnit 榪涜鍗曞厓嫻嬭瘯鍚с備笅闈㈢殑渚嬪瓙鏉ヨ嚜絎旇呯殑寮鍙戝疄璺碉細宸ュ叿綾?WordDealUtil 涓殑闈欐佹柟娉?wordFormat4DB 鏄笓鐢ㄤ簬澶勭悊 Java 瀵硅薄鍚嶇О鍚戞暟鎹簱琛ㄥ悕杞崲鐨勬柟娉曪紙鎮ㄥ彲浠ュ湪浠g爜娉ㄩ噴涓彲浠ュ緱鍒版洿澶氳緇嗙殑鍐呭錛夈備笅闈㈡槸絎竴嬈$紪鐮佸畬鎴愬悗澶ц嚧鎯呭艦錛?/p>
 package com.ai92.cooljunit; 

 import java.util.regex.Matcher; 
 import java.util.regex.Pattern; 

 /** 
 * 瀵瑰悕縐般佸湴鍧絳夊瓧絎︿覆鏍煎紡鐨勫唴瀹硅繘琛屾牸寮忔鏌?
 * 鎴栬呮牸寮忓寲鐨勫伐鍏風被
 * 
 * @author Ai92 
 */ 
 public class WordDealUtil { 

	 /** 
	 * 灝?Java 瀵硅薄鍚嶇О錛堟瘡涓崟璇嶇殑澶村瓧姣嶅ぇ鍐欙級鎸夌収
	 * 鏁版嵁搴撳懡鍚嶇殑涔犳儻榪涜鏍煎紡鍖?
	 * 鏍煎紡鍖栧悗鐨勬暟鎹負灝忓啓瀛楁瘝錛屽茍涓斾嬌鐢ㄤ笅鍒掔嚎鍒嗗壊鍛藉悕鍗曡瘝
	 * 
	 * 渚嬪錛歟mployeeInfo 緇忚繃鏍煎紡鍖栦箣鍚庡彉涓?employee_info 
	 * 
	 * @param name 	 Java 瀵硅薄鍚嶇О
	 */ 
	 public static String wordFormat4DB(String name){ 
		 Pattern p = Pattern.compile("[A-Z]"); 
		 Matcher m = p.matcher(name); 
		 StringBuffer sb = new StringBuffer(); 
		
		 while(m.find()){ 
			 m.appendReplacement(sb, "_"+m.group()); 
		 } 
		 return m.appendTail(sb).toString().toLowerCase(); 
	 } 
 } 

瀹冩槸鍚﹁兘鎸夌収棰勬湡鐨勬晥鏋滄墽琛屽憿錛熷皾璇曚負瀹冪紪鍐?JUnit 鍗曞厓嫻嬭瘯浠g爜濡備笅錛?/p>
 package com.ai92.cooljunit; 

 import static org.junit.Assert.assertEquals; 
 import org.junit.Test; 

 public class TestWordDealUtil { 
	 // 嫻嬭瘯 wordFormat4DB 姝e父榪愯鐨勬儏鍐?
	 @Test public void wordFormat4DBNormal(){ 
		 String target = "employeeInfo"; 
		 String result = WordDealUtil.wordFormat4DB(target); 
		
		 assertEquals("employee_info", result); 
	 } 
 } 

寰堟櫘閫氱殑涓涓被鍢涳紒嫻嬭瘯綾?TestWordDealUtil 涔嬫墍浠ヤ嬌鐢?#8220;Test”寮澶達紝瀹屽叏鏄負浜嗘洿濂界殑鍖哄垎嫻嬭瘯綾諱笌琚祴璇曠被銆傛祴璇曟柟娉?wordFormat4DBNormal 璋冪敤鎵ц琚祴璇曟柟娉?WordDealUtil.wordFormat4DB錛屼互鍒ゆ柇榪愯緇撴灉鏄惁杈懼埌璁捐棰勬湡鐨勬晥鏋溿傞渶瑕佹敞鎰忕殑鏄紝嫻嬭瘯鏂規硶 wordFormat4DBNormal 闇瑕佹寜鐓т竴瀹氱殑瑙勮寖涔﹀啓錛?/p>

  1. 嫻嬭瘯鏂規硶蹇呴』浣跨敤娉ㄨВ org.junit.Test 淇グ銆?/li>
  2. 嫻嬭瘯鏂規硶蹇呴』浣跨敤 public void 淇グ錛岃屼笖涓嶈兘甯︽湁浠諱綍鍙傛暟銆?

嫻嬭瘯鏂規硶涓澶勭悊鐨勫瓧絎︿覆涓?#8220;employeeInfo”錛屾寜鐓ц璁$洰鐨勶紝澶勭悊鍚庣殑緇撴灉搴旇涓?#8220;employee_info”銆俛ssertEquals 鏄敱 JUnit 鎻愪緵鐨勪竴緋誨垪鍒ゆ柇嫻嬭瘯緇撴灉鏄惁姝g‘鐨勯潤鎬佹柇璦鏂規硶錛堜綅浜庣被 org.junit.Assert 涓級涔嬩竴錛屾垜浠嬌鐢ㄥ畠灝嗘墽琛岀粨鏋?result 鍜岄鏈熷?#8220;employee_info”榪涜姣旇緝錛屾潵鍒ゆ柇嫻嬭瘯鏄惁鎴愬姛銆?/p>

鐪嬬湅榪愯緇撴灉濡備綍銆傚湪嫻嬭瘯綾諱笂鐐瑰嚮鍙抽敭錛屽湪寮瑰嚭鑿滃崟涓夋嫨 Run As JUnit Test銆傝繍琛岀粨鏋滃 涓嬪浘鎵紺猴細


鍥?3 JUnit 榪愯鎴愬姛鐣岄潰
鍥?3 JUnit 榪愯鎴愬姛鐣岄潰

緇胯壊鐨勮繘搴︽潯鎻愮ず鎴戜滑錛屾祴璇曡繍琛岄氳繃浜嗐備絾鐜板湪灝卞甯冧唬鐮侀氳繃浜嗗崟鍏冩祴璇曡繕涓烘椂榪囨棭銆傝浣忥細鎮ㄧ殑鍗曞厓嫻嬭瘯浠g爜涓嶆槸鐢ㄦ潵璇佹槑鎮ㄦ槸瀵圭殑錛岃屾槸涓轟簡璇佹槑鎮ㄦ病鏈夐敊銆傚洜姝ゅ崟鍏冩祴璇曠殑鑼冨洿瑕佸叏闈紝姣斿瀵硅竟鐣屽箋佹甯稿箋侀敊璇煎緱嫻嬭瘯錛涘浠g爜鍙兘鍑虹幇鐨勯棶棰樿鍏ㄩ潰棰勬祴錛岃岃繖涔熸鏄渶姹傚垎鏋愩佽緇嗚璁$幆鑺備腑瑕佽冭檻鐨勩傛樉鐒訛紝鎴戜滑鐨勬祴璇曟墠鍒氬垰寮濮嬶紝緇х畫琛ュ厖涓浜涘鐗規畩鎯呭喌鐨勬祴璇曪細

 public class TestWordDealUtil { 
	……
	 // 嫻嬭瘯 null 鏃剁殑澶勭悊鎯呭喌
	 @Test public void wordFormat4DBNull(){ 
		 String target = null; 
		 String result = WordDealUtil.wordFormat4DB(target); 
		
		 assertNull(result); 
	 } 
	
	 // 嫻嬭瘯絀哄瓧絎︿覆鐨勫鐞嗘儏鍐?
	 @Test public void wordFormat4DBEmpty(){ 
		 String target = ""; 
		 String result = WordDealUtil.wordFormat4DB(target); 
		
		 assertEquals("", result); 
	 } 

	 // 嫻嬭瘯褰撻瀛楁瘝澶у啓鏃剁殑鎯呭喌
	 @Test public void wordFormat4DBegin(){ 
		 String target = "EmployeeInfo"; 
		 String result = WordDealUtil.wordFormat4DB(target); 
		
		 assertEquals("employee_info", result); 
	 } 
	
	 // 嫻嬭瘯褰撳熬瀛楁瘝涓哄ぇ鍐欐椂鐨勬儏鍐?
	 @Test public void wordFormat4DBEnd(){ 
		 String target = "employeeInfoA"; 
		 String result = WordDealUtil.wordFormat4DB(target); 
		
		 assertEquals("employee_info_a", result); 
	 } 
	
	 // 嫻嬭瘯澶氫釜鐩歌繛瀛楁瘝澶у啓鏃剁殑鎯呭喌
	 @Test public void wordFormat4DBTogether(){ 
		 String target = "employeeAInfo"; 
		 String result = WordDealUtil.wordFormat4DB(target); 
		
		 assertEquals("employee_a_info", result); 
	 } 
 } 

鍐嶆榪愯嫻嬭瘯銆傚緢閬楁喚錛孞Unit 榪愯鐣岄潰鎻愮ず鎴戜滑鏈変袱涓祴璇曟儏鍐墊湭閫氳繃嫻嬭瘯錛?a >鍥?4錛?#8212;—褰撻瀛楁瘝澶у啓鏃跺緱鍒扮殑澶勭悊緇撴灉涓庨鏈熺殑鏈夊亸宸紝閫犳垚嫻嬭瘯澶辮觸錛坒ailure錛夛紱鑰屽綋嫻嬭瘯瀵?null 鐨勫鐞嗙粨鏋滄椂錛屽垯鐩存帴鎶涘嚭浜嗗紓甯?#8212;—嫻嬭瘯閿欒錛坋rror錛夈傛樉鐒訛紝琚祴璇曚唬鐮佷腑騫舵病鏈夊棣栧瓧姣嶅ぇ鍐欏拰 null 榪欎袱縐嶇壒孌婃儏鍐佃繘琛屽鐞嗭紝淇敼濡備笅錛?/p>
 // 淇敼鍚庣殑鏂規硶 wordFormat4DB 
 /** 
	 * 灝?Java 瀵硅薄鍚嶇О錛堟瘡涓崟璇嶇殑澶村瓧姣嶅ぇ鍐欙級鎸夌収
	 * 鏁版嵁搴撳懡鍚嶇殑涔犳儻榪涜鏍煎紡鍖?
	 * 鏍煎紡鍖栧悗鐨勬暟鎹負灝忓啓瀛楁瘝錛屽茍涓斾嬌鐢ㄤ笅鍒掔嚎鍒嗗壊鍛藉悕鍗曡瘝
	 * 濡傛灉鍙傛暟 name 涓?null錛屽垯榪斿洖 null 
	 * 
	 * 渚嬪錛歟mployeeInfo 緇忚繃鏍煎紡鍖栦箣鍚庡彉涓?employee_info 
	 * 
	 * @param name Java 瀵硅薄鍚嶇О
	 */ 
	 public static String wordFormat4DB(String name){ 
		
		 if(name == null){ 
			 return null; 
		 } 
		
		 Pattern p = Pattern.compile("[A-Z]"); 
		 Matcher m = p.matcher(name); 
		 StringBuffer sb = new StringBuffer(); 
		
		 while(m.find()){ 
			 if(m.start() != 0) 
				 m.appendReplacement(sb, ("_"+m.group()).toLowerCase()); 
		 } 
		 return m.appendTail(sb).toString().toLowerCase(); 
	 } 


鍥?4 JUnit 榪愯澶辮觸鐣岄潰
鍥?4 JUnit 榪愯澶辮觸鐣岄潰

JUnit 灝嗘祴璇曞け璐ョ殑鎯呭喌鍒嗕負涓ょ錛歠ailure 鍜?error銆侳ailure 涓鑸敱鍗曞厓嫻嬭瘯浣跨敤鐨勬柇璦鏂規硶鍒ゆ柇澶辮觸寮曡搗錛屽畠琛ㄧず鍦ㄦ祴璇曠偣鍙戠幇浜嗛棶棰橈紱鑰?error 鍒欐槸鐢變唬鐮佸紓甯稿紩璧鳳紝榪欐槸嫻嬭瘯鐩殑涔嬪鐨勫彂鐜幫紝瀹冨彲鑳戒駭鐢熶簬嫻嬭瘯浠g爜鏈韓鐨勯敊璇紙嫻嬭瘯浠g爜涔熸槸浠g爜錛屽悓鏍鋒棤娉曚繚璇佸畬鍏ㄦ病鏈夌己闄鳳級錛屼篃鍙兘鏄嫻嬭瘯浠g爜涓殑涓涓殣钘忕殑 bug銆?/p>

璇風墷璁幫紒

璇風墷璁拌繖涓鏉?JUnit 鏈浣沖疄璺碉細嫻嬭瘯浠諱綍鍙兘鐨勯敊璇傚崟鍏冩祴璇曚笉鏄敤鏉ヨ瘉鏄庢偍鏄鐨勶紝鑰屾槸涓轟簡璇佹槑鎮ㄦ病鏈夐敊銆?/p>

鍟婂搱錛屽啀嬈¤繍琛屾祴璇曪紝緇挎潯鍙堥噸鐜扮溂鍓嶃傞氳繃瀵?WordDealUtil.wordFormat4DB 姣旇緝鍏ㄩ潰鐨勫崟鍏冩祴璇曪紝鐜板湪鐨勪唬鐮佸凡緇忔瘮杈冪ǔ瀹氾紝鍙互浣滀負 API 鐨勪竴閮ㄥ垎鎻愪緵緇欏叾瀹冩ā鍧椾嬌鐢ㄤ簡銆?/p>

涓嶇煡涓嶈涓垜浠凡緇忎嬌鐢?JUnit 婕備寒鐨勫畬鎴愪簡涓嬈″崟鍏冩祴璇曘傚彲浠ヤ綋浼氬埌 JUnit 鏄涔堣交閲忕駭錛屽涔堢畝鍗曪紝鏍規湰涓嶉渶瑕佽姳蹇冩濆幓鐮旂┒錛岃繖灝卞彲浠ユ妸鏇村鐨勬敞鎰忓姏鏀懼湪鏇存湁鎰忎箟鐨勪簨鎯呬笂——緙栧啓瀹屾暣鍏ㄩ潰鐨勫崟鍏冩祴璇曘?/p>


JUnit 娣卞叆

褰撶劧錛孞Unit 鎻愪緵鐨勫姛鑳藉喅涓嶄粎浠呭姝ょ畝鍗曪紝鍦ㄦ帴涓嬫潵鐨勫唴瀹逛腑錛屾垜浠細鐪嬪埌 JUnit 涓緢澶氭湁鐢ㄧ殑鐗規э紝鎺屾彙瀹冧滑瀵規偍鐏墊椿鐨勭紪鍐欏崟鍏冩祴璇曚唬鐮侀潪甯告湁甯姪銆?/p>

Fixture

浣曡皳 Fixture 錛熷畠鏄寚鍦ㄦ墽琛屼竴涓垨鑰呭涓祴璇曟柟娉曟椂闇瑕佺殑涓緋誨垪鍏叡璧勬簮鎴栬呮暟鎹紝渚嬪嫻嬭瘯鐜錛屾祴璇曟暟鎹瓑絳夈傚湪緙栧啓鍗曞厓嫻嬭瘯鐨勮繃紼嬩腑錛屾偍浼氬彂鐜板湪澶ч儴鍒嗙殑嫻嬭瘯鏂規硶鍦ㄨ繘琛岀湡姝g殑嫻嬭瘯涔嬪墠閮介渶瑕佸仛澶ч噺鐨勯摵鍨?#8212;—涓鴻璁″噯澶?Fixture 鑰屽繖紕屻傝繖浜涢摵鍨繃紼嬪崰鎹殑浠g爜寰寰姣旂湡姝f祴璇曠殑浠g爜澶氬緱澶氾紝鑰屼笖榪欎釜姣旂巼闅忕潃嫻嬭瘯鐨勫鏉傜▼搴︾殑澧炲姞鑰岄掑銆傚綋澶氫釜嫻嬭瘯鏂規硶閮介渶瑕佸仛鍚屾牱鐨勯摵鍨椂錛岄噸澶嶄唬鐮佺殑“鍧忓懗閬?#8221;渚垮湪嫻嬭瘯浠g爜涓譏婕紑鏉ャ傝繖鑲?#8220;鍧忓懗閬?#8221;浼氬紕鑴忔偍鐨勪唬鐮侊紝榪樹細鍥犱負鐤忓拷閫犳垚閿欒錛屽簲璇ヤ嬌鐢ㄤ竴浜涙墜孌墊潵鏍歸櫎瀹冦?/p>

JUnit 涓撻棬鎻愪緵浜嗚緗叕鍏?Fixture 鐨勬柟娉曪紝鍚屼竴嫻嬭瘯綾諱腑鐨勬墍鏈夋祴璇曟柟娉曢兘鍙互鍏辯敤瀹冩潵鍒濆鍖?Fixture 鍜屾敞閿 Fixture銆傚拰緙栧啓 JUnit 嫻嬭瘯鏂規硶涓鏍鳳紝鍏叡 Fixture 鐨勮緗篃寰堢畝鍗曪紝鎮ㄥ彧闇瑕侊細

  1. 浣跨敤娉ㄨВ org,junit.Before 淇グ鐢ㄤ簬鍒濆鍖?Fixture 鐨勬柟娉曘?/li>
  2. 浣跨敤娉ㄨВ org.junit.After 淇グ鐢ㄤ簬娉ㄩ攢 Fixture 鐨勬柟娉曘?/li>
  3. 淇濊瘉榪欎袱縐嶆柟娉曢兘浣跨敤 public void 淇グ錛岃屼笖涓嶈兘甯︽湁浠諱綍鍙傛暟銆?

閬靛驚涓婇潰鐨勪笁鏉″師鍒欙紝緙栧啓鍑虹殑浠g爜澶т綋鏄繖涓牱瀛愶細

 // 鍒濆鍖?Fixture 鏂規硶
 @Before public void init(){ …… } 

 // 娉ㄩ攢 Fixture 鏂規硶
 @After public void destroy(){ …… } 

榪欐牱錛屽湪姣忎竴涓祴璇曟柟娉曟墽琛屼箣鍓嶏紝JUnit 浼氫繚璇?init 鏂規硶宸茬粡鎻愬墠鍒濆鍖栨祴璇曠幆澧冿紝鑰屽綋姝ゆ祴璇曟柟娉曟墽琛屽畬姣曚箣鍚庯紝JUnit 鍙堜細璋冪敤 destroy 鏂規硶娉ㄩ攢嫻嬭瘯鐜銆傛敞鎰忔槸姣忎竴涓祴璇曟柟娉曠殑鎵ц閮戒細瑙﹀彂瀵瑰叕鍏?Fixture 鐨勮緗紝涔熷氨鏄浣跨敤娉ㄨВ Before 鎴栬?After 淇グ鐨勫叕鍏?Fixture 璁劇疆鏂規硶鏄柟娉曠駭鍒殑錛?a >鍥?5錛夈傝繖鏍蜂究鍙互淇濊瘉鍚勪釜鐙珛鐨勬祴璇曚箣闂翠簰涓嶅共鎵幫紝浠ュ厤鍏跺畠嫻嬭瘯浠g爜淇敼嫻嬭瘯鐜鎴栬呮祴璇曟暟鎹獎鍝嶅埌鍏跺畠嫻嬭瘯浠g爜鐨勫噯紜с?/p>
鍥?5 鏂規硶綰у埆 Fixture 鎵ц紺烘剰鍥?/strong>
鍥?5 鏂規硶綰у埆 Fixture 鎵ц紺烘剰鍥? src=

鍙槸錛岃繖縐?Fixture 璁劇疆鏂瑰紡榪樻槸寮曟潵浜嗘壒璇勶紝鍥犱負瀹冩晥鐜囦綆涓嬶紝鐗瑰埆鏄湪璁劇疆 Fixture 闈炲父鑰楁椂鐨勬儏鍐典笅錛堜緥濡傝緗暟鎹簱閾炬帴錛夈傝屼笖瀵逛簬涓嶄細鍙戠敓鍙樺寲鐨勬祴璇曠幆澧冩垨鑰呮祴璇曟暟鎹潵璇達紝鏄笉浼氬獎鍝嶅埌嫻嬭瘯鏂規硶鐨勬墽琛岀粨鏋滅殑錛屼篃灝辨病鏈夊繀瑕侀拡瀵規瘡涓涓祴璇曟柟娉曢噸鏂拌緗竴嬈?Fixture銆傚洜姝ゅ湪 JUnit 4 涓紩鍏ヤ簡綾葷駭鍒殑 Fixture 璁劇疆鏂規硶錛岀紪鍐欒鑼冨涓嬶細

  1. 浣跨敤娉ㄨВ org,junit.BeforeClass 淇グ鐢ㄤ簬鍒濆鍖?Fixture 鐨勬柟娉曘?/li>
  2. 浣跨敤娉ㄨВ org.junit.AfterClass 淇グ鐢ㄤ簬娉ㄩ攢 Fixture 鐨勬柟娉曘?/li>
  3. 淇濊瘉榪欎袱縐嶆柟娉曢兘浣跨敤 public static void 淇グ錛岃屼笖涓嶈兘甯︽湁浠諱綍鍙傛暟銆?

綾葷駭鍒殑 Fixture 浠呬細鍦ㄦ祴璇曠被涓墍鏈夋祴璇曟柟娉曟墽琛屼箣鍓嶆墽琛屽垵濮嬪寲錛屽茍鍦ㄥ叏閮ㄦ祴璇曟柟娉曟祴璇曞畬姣曚箣鍚庢墽琛屾敞閿鏂規硶錛?a >鍥?6錛夈備唬鐮佽寖鏈涓嬶細

 // 綾葷駭鍒?Fixture 鍒濆鍖栨柟娉?
 @BeforeClass public static void dbInit(){ …… } 
	
 // 綾葷駭鍒?Fixture 娉ㄩ攢鏂規硶
	 @AfterClass public static void dbClose(){ …… } 


鍥?6 綾葷駭鍒?Fixture 鎵ц紺烘剰鍥?/strong>
鍥?6 綾葷駭鍒?Fixture 鎵ц紺烘剰鍥? src=

寮傚父浠ュ強鏃墮棿嫻嬭瘯

娉ㄨВ org.junit.Test 涓湁涓や釜闈炲父鏈夌敤鐨勫弬鏁幫細expected 鍜?timeout銆傚弬鏁?expected 浠h〃嫻嬭瘯鏂規硶鏈熸湜鎶涘嚭鎸囧畾鐨勫紓甯革紝濡傛灉榪愯嫻嬭瘯騫舵病鏈夋姏鍑鴻繖涓紓甯革紝鍒?JUnit 浼氳涓鴻繖涓祴璇曟病鏈夐氳繃銆傝繖涓洪獙璇佽嫻嬭瘯鏂規硶鍦ㄩ敊璇殑鎯呭喌涓嬫槸鍚︿細鎶涘嚭棰勫畾鐨勫紓甯告彁渚涗簡渚垮埄銆備婦渚嬫潵璇達紝鏂規硶 supportDBChecker 鐢ㄤ簬媯鏌ョ敤鎴蜂嬌鐢ㄧ殑鏁版嵁搴撶増鏈槸鍚﹀湪緋葷粺鐨勬敮鎸佺殑鑼冨洿涔嬪唴錛屽鏋滅敤鎴蜂嬌鐢ㄤ簡涓嶈鏀寔鐨勬暟鎹簱鐗堟湰錛屽垯浼氭姏鍑鴻繍琛屾椂寮傚父 UnsupportedDBVersionException銆傛祴璇曟柟娉?supportDBChecker 鍦ㄦ暟鎹簱鐗堟湰涓嶆敮鎸佹椂鏄惁浼氭姏鍑烘寚瀹氬紓甯哥殑鍗曞厓嫻嬭瘯鏂規硶澶т綋濡備笅錛?/p>
 @Test(expected=UnsupportedDBVersionException.class) 
	 public void unsupportedDBCheck(){ 
		……
 } 

娉ㄨВ org.junit.Test 鐨勫彟涓涓弬鏁?timeout錛屾寚瀹氳嫻嬭瘯鏂規硶琚厑璁歌繍琛岀殑鏈闀挎椂闂村簲璇ユ槸澶氬皯錛屽鏋滄祴璇曟柟娉曡繍琛屾椂闂磋秴榪囦簡鎸囧畾鐨勬縐掓暟錛屽垯 JUnit 璁や負嫻嬭瘯澶辮觸銆傝繖涓弬鏁板浜庢ц兘嫻嬭瘯鏈変竴瀹氱殑甯姪銆備緥濡傦紝濡傛灉瑙f瀽涓浠借嚜瀹氫箟鐨?XML 鏂囨。鑺辮垂浜嗗浜?1 縐掔殑鏃墮棿錛屽氨闇瑕侀噸鏂拌冭檻 XML 緇撴瀯鐨勮璁★紝閭e崟鍏冩祴璇曟柟娉曞彲浠ヨ繖鏍鋒潵鍐欙細

 @Test(timeout=1000) 
	 public void selfXMLReader(){ 
		……
 } 

蹇界暐嫻嬭瘯鏂規硶

JUnit 鎻愪緵娉ㄨВ org.junit.Ignore 鐢ㄤ簬鏆傛椂蹇界暐鏌愪釜嫻嬭瘯鏂規硶錛屽洜涓烘湁鏃跺欑敱浜庢祴璇曠幆澧冨彈闄愶紝騫朵笉鑳戒繚璇佹瘡涓涓祴璇曟柟娉曢兘鑳芥紜繍琛屻備緥濡備笅闈㈢殑浠g爜渚胯〃紺虹敱浜庢病鏈変簡鏁版嵁搴撻摼鎺ワ紝鎻愮ず JUnit 蹇界暐嫻嬭瘯鏂規硶 unsupportedDBCheck錛?/p>
 @ Ignore(“db is down”) 
 @Test(expected=UnsupportedDBVersionException.class) 
	 public void unsupportedDBCheck(){ 
		……
 } 

浣嗘槸涓瀹氳灝忓績銆傛敞瑙?org.junit.Ignore 鍙兘鐢ㄤ簬鏆傛椂鐨勫拷鐣ユ祴璇曪紝濡傛灉闇瑕佹案榪滃拷鐣ヨ繖浜涙祴璇曪紝涓瀹氳紜琚祴璇曚唬鐮佷笉鍐嶉渶瑕佽繖浜涙祴璇曟柟娉曪紝浠ュ厤蹇界暐蹇呰鐨勬祴璇曠偣銆?/p>

嫻嬭瘯榪愯鍣?/span>

鍙堜竴涓柊姒傚康鍑虹幇浜?#8212;—嫻嬭瘯榪愯鍣紝JUnit 涓墍鏈夌殑嫻嬭瘯鏂規硶閮芥槸鐢卞畠璐熻矗鎵ц鐨勩侸Unit 涓哄崟鍏冩祴璇曟彁渚涗簡榛樿鐨勬祴璇曡繍琛屽櫒錛屼絾 JUnit 騫舵病鏈夐檺鍒舵偍蹇呴』浣跨敤榛樿鐨勮繍琛屽櫒銆傜浉鍙嶏紝鎮ㄤ笉浠呭彲浠ュ畾鍒惰嚜宸辯殑榪愯鍣紙鎵鏈夌殑榪愯鍣ㄩ兘緇ф壙鑷?org.junit.runner.Runner錛夛紝鑰屼笖榪樺彲浠ヤ負姣忎竴涓祴璇曠被鎸囧畾浣跨敤鏌愪釜鍏蜂綋鐨勮繍琛屽櫒銆傛寚瀹氭柟娉曚篃寰堢畝鍗曪紝浣跨敤娉ㄨВ org.junit.runner.RunWith 鍦ㄦ祴璇曠被涓婃樉寮忕殑澹版槑瑕佷嬌鐢ㄧ殑榪愯鍣ㄥ嵆鍙細

 @RunWith(CustomTestRunner.class) 
 public class TestWordDealUtil { 
……
 } 

鏄捐屾槗瑙侊紝濡傛灉嫻嬭瘯綾繪病鏈夋樉寮忕殑澹版槑浣跨敤鍝竴涓祴璇曡繍琛屽櫒錛孞Unit 浼氬惎鍔ㄩ粯璁ょ殑嫻嬭瘯榪愯鍣ㄦ墽琛屾祴璇曠被錛堟瘮濡備笂闈㈡彁鍙婄殑鍗曞厓嫻嬭瘯浠g爜錛夈備竴鑸儏鍐典笅錛岄粯璁ゆ祴璇曡繍琛屽櫒鍙互搴斿緇濆ぇ澶氭暟鐨勫崟鍏冩祴璇曡姹傦紱褰撲嬌鐢?JUnit 鎻愪緵鐨勪竴浜涢珮綰х壒鎬э紙渚嬪鍗沖皢浠嬬粛鐨勪袱涓壒鎬э級鎴栬呴拡瀵圭壒孌婇渶姹傚畾鍒?JUnit 嫻嬭瘯鏂瑰紡鏃訛紝鏄懼紡鐨勫0鏄庢祴璇曡繍琛屽櫒灝卞繀涓嶅彲灝戜簡銆?/p>

嫻嬭瘯濂椾歡

鍦ㄥ疄闄呴」鐩腑錛岄殢鐫欏圭洰榪涘害鐨勫紑灞曪紝鍗曞厓嫻嬭瘯綾諱細瓚婃潵瓚婂錛屽彲鏄洿鍒扮幇鍦ㄦ垜浠繕鍙細涓涓竴涓殑鍗曠嫭榪愯嫻嬭瘯綾伙紝榪欏湪瀹為檯欏圭洰瀹炶返涓偗瀹氭槸涓嶅彲琛岀殑銆備負浜嗚В鍐寵繖涓棶棰橈紝JUnit 鎻愪緵浜嗕竴縐嶆壒閲忚繍琛屾祴璇曠被鐨勬柟娉曪紝鍙仛嫻嬭瘯濂椾歡銆傝繖鏍鳳紝姣忔闇瑕侀獙璇佺郴緇熷姛鑳芥紜ф椂錛屽彧鎵ц涓涓垨鍑犱釜嫻嬭瘯濂椾歡渚垮彲浠ヤ簡銆傛祴璇曞浠剁殑鍐欐硶闈炲父綆鍗曪紝鎮ㄥ彧闇瑕侀伒寰互涓嬭鍒欙細

  1. 鍒涘緩涓涓┖綾諱綔涓烘祴璇曞浠剁殑鍏ュ彛銆?/li>
  2. 浣跨敤娉ㄨВ org.junit.runner.RunWith 鍜?org.junit.runners.Suite.SuiteClasses 淇グ榪欎釜絀虹被銆?/li>
  3. 灝?org.junit.runners.Suite 浣滀負鍙傛暟浼犲叆娉ㄨВ RunWith錛屼互鎻愮ず JUnit 涓烘綾諱嬌鐢ㄥ浠惰繍琛屽櫒鎵ц銆?/li>
  4. 灝嗛渶瑕佹斁鍏ユ嫻嬭瘯濂椾歡鐨勬祴璇曠被緇勬垚鏁扮粍浣滀負娉ㄨВ SuiteClasses 鐨勫弬鏁般?/li>
  5. 淇濊瘉榪欎釜絀虹被浣跨敤 public 淇グ錛岃屼笖瀛樺湪鍏紑鐨勪笉甯︽湁浠諱綍鍙傛暟鐨勬瀯閫犲嚱鏁般?
 package com.ai92.cooljunit; 

 import org.junit.runner.RunWith; 
 import org.junit.runners.Suite; 
……

 /** 
 * 鎵歸噺嫻嬭瘯 宸ュ叿鍖?涓祴璇曠被
 * @author Ai92 
 */ 
 @RunWith(Suite.class) 
 @Suite.SuiteClasses({TestWordDealUtil.class}) 
 public class RunAllUtilTestsSuite { 
 } 

涓婁緥浠g爜涓紝鎴戜滑灝嗗墠鏂囨彁鍒扮殑嫻嬭瘯綾?TestWordDealUtil 鏀懼叆浜嗘祴璇曞浠?RunAllUtilTestsSuite 涓紝鍦?Eclipse 涓繍琛屾祴璇曞浠訛紝鍙互鐪嬪埌嫻嬭瘯綾?TestWordDealUtil 琚皟鐢ㄦ墽琛屼簡銆傛祴璇曞浠朵腑涓嶄粎鍙互鍖呭惈鍩烘湰鐨勬祴璇曠被錛岃屼笖鍙互鍖呭惈鍏跺畠鐨勬祴璇曞浠訛紝榪欐牱鍙互寰堟柟渚跨殑鍒嗗眰綆$悊涓嶅悓妯″潡鐨勫崟鍏冩祴璇曚唬鐮併備絾鏄紝鎮ㄤ竴瀹氳淇濊瘉嫻嬭瘯濂椾歡涔嬮棿娌℃湁寰幆鍖呭惈鍏崇郴錛屽惁鍒欐棤灝界殑寰幆灝變細鍑虹幇鍦ㄦ偍鐨勯潰鍓?#8230;…銆?/p>

鍙傛暟鍖栨祴璇?/span>

鍥為【涓涓嬫垜浠湪灝忚妭“JUnit 鍒濅綋楠?/a>”涓婦鐨勫疄渚嬨備負浜嗕繚璇佸崟鍏冩祴璇曠殑涓ヨ皚鎬э紝鎴戜滑妯℃嫙浜嗕笉鍚岀被鍨嬬殑瀛楃涓叉潵嫻嬭瘯鏂規硶鐨勫鐞嗚兘鍔涳紝涓烘鎴戜滑緙栧啓澶ч噺鐨勫崟鍏冩祴璇曟柟娉曘傚彲鏄繖浜涙祴璇曟柟娉曢兘鏄ぇ鍚屽皬寮傦細浠g爜緇撴瀯閮芥槸鐩稿悓鐨勶紝涓嶅悓鐨勪粎浠呮槸嫻嬭瘯鏁版嵁鍜屾湡鏈涘箋傛湁娌℃湁鏇村ソ鐨勬柟娉曞皢嫻嬭瘯鏂規硶涓浉鍚岀殑浠g爜緇撴瀯鎻愬彇鍑烘潵錛屾彁楂樹唬鐮佺殑閲嶇敤搴︼紝鍑忓皯澶嶅埗綺樿創浠g爜鐨勭儲鎭鹼紵鍦ㄤ互鍓嶇殑 JUnit 鐗堟湰涓婏紝騫舵病鏈夊ソ鐨勮В鍐蟲柟娉曪紝鑰岀幇鍦ㄦ偍鍙互浣跨敤 JUnit 鎻愪緵鐨勫弬鏁板寲嫻嬭瘯鏂瑰紡搴斿榪欎釜闂銆?/p>

鍙傛暟鍖栨祴璇曠殑緙栧啓紼嶅井鏈夌偣楹葷儲錛堝綋鐒惰繖鏄浉瀵逛簬 JUnit 涓叾瀹冪壒鎬ц岃█錛夛細

  1. 涓哄噯澶囦嬌鐢ㄥ弬鏁板寲嫻嬭瘯鐨勬祴璇曠被鎸囧畾鐗規畩鐨勮繍琛屽櫒 org.junit.runners.Parameterized銆?/li>
  2. 涓烘祴璇曠被澹版槑鍑犱釜鍙橀噺錛屽垎鍒敤浜庡瓨鏀炬湡鏈涘煎拰嫻嬭瘯鎵鐢ㄦ暟鎹?/li>
  3. 涓烘祴璇曠被澹版槑涓涓嬌鐢ㄦ敞瑙?org.junit.runners.Parameterized.Parameters 淇グ鐨勶紝榪斿洖鍊間負 java.util.Collection 鐨勫叕鍏遍潤鎬佹柟娉曪紝騫跺湪姝ゆ柟娉曚腑鍒濆鍖栨墍鏈夐渶瑕佹祴璇曠殑鍙傛暟瀵廣?/li>
  4. 涓烘祴璇曠被澹版槑涓涓甫鏈夊弬鏁扮殑鍏叡鏋勯犲嚱鏁幫紝騫跺湪鍏朵腑涓虹浜屼釜鐜妭涓0鏄庣殑鍑犱釜鍙橀噺璧嬪箋?/li>
  5. 緙栧啓嫻嬭瘯鏂規硶錛屼嬌鐢ㄥ畾涔夌殑鍙橀噺浣滀負鍙傛暟榪涜嫻嬭瘯銆?

鎴戜滑鎸夌収榪欎釜鏍囧噯錛岄噸鏂版敼閫犱竴鐣垜浠殑鍗曞厓嫻嬭瘯浠g爜錛?/p>
package com.ai92.cooljunit; 

import static org.junit.Assert.assertEquals; 
import java.util.Arrays; 
import java.util.Collection; 

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.junit.runners.Parameterized; 
import org.junit.runners.Parameterized.Parameters; 

@RunWith(Parameterized.class) 
public class TestWordDealUtilWithParam { 

        private String expected; 
    
        private String target; 
    
        @Parameters 
        public static Collection words(){ 
            return Arrays.asList(new Object[][]{ 
                {"employee_info", "employeeInfo"},      // 嫻嬭瘯涓鑸殑澶勭悊鎯呭喌
                {null, null},                           // 嫻嬭瘯 null 鏃剁殑澶勭悊鎯呭喌
                {"", ""},                               // 嫻嬭瘯絀哄瓧絎︿覆鏃剁殑澶勭悊鎯呭喌
                {"employee_info", "EmployeeInfo"},      // 嫻嬭瘯褰撻瀛楁瘝澶у啓鏃剁殑鎯呭喌
                {"employee_info_a", "employeeInfoA"},   // 嫻嬭瘯褰撳熬瀛楁瘝涓哄ぇ鍐欐椂鐨勬儏鍐?
                {"employee_a_info", "employeeAInfo"}    // 嫻嬭瘯澶氫釜鐩歌繛瀛楁瘝澶у啓鏃剁殑鎯呭喌
            }); 
        } 
    
         /** 
         * 鍙傛暟鍖栨祴璇曞繀欏葷殑鏋勯犲嚱鏁?
         * @param expected     鏈熸湜鐨勬祴璇曠粨鏋滐紝瀵瑰簲鍙傛暟闆嗕腑鐨勭涓涓弬鏁?
         * @param target     嫻嬭瘯鏁版嵁錛屽搴斿弬鏁伴泦涓殑絎簩涓弬鏁?
         */ 
        public TestWordDealUtilWithParam(String expected , String target){ 
            this.expected = expected; 
            this.target = target; 
        } 
    
         /** 
         * 嫻嬭瘯灝?Java 瀵硅薄鍚嶇О鍒版暟鎹簱鍚嶇О鐨勮漿鎹?
         */ 
        @Test public void wordFormat4DB(){ 
            assertEquals(expected, WordDealUtil.wordFormat4DB(target)); 
        } 
} 

寰堟槑鏄撅紝浠g爜鐦﹁韓浜嗐傚湪闈欐佹柟娉?words 涓紝鎴戜滑浣跨敤浜岀淮鏁扮粍鏉ユ瀯寤烘祴璇曟墍闇瑕佺殑鍙傛暟鍒楄〃錛屽叾涓瘡涓暟緇勪腑鐨勫厓绱犵殑鏀劇疆欏哄簭騫舵病鏈変粈涔堣姹傦紝鍙鍜屾瀯閫犲嚱鏁頒腑鐨勯『搴忎繚鎸佷竴鑷村氨鍙互浜嗐傜幇鍦ㄥ鏋滃啀澧炲姞涓縐嶆祴璇曟儏鍐碉紝鍙渶瑕佸湪闈欐佹柟娉?words 涓坊鍔犵浉搴旂殑鏁扮粍鍗沖彲錛屼笉鍐嶉渶瑕佸鍒剁矘璐村嚭涓涓柊鐨勬柟娉曞嚭鏉ヤ簡銆?/p>


JUnit 鍜?Ant

闅忕潃欏圭洰鐨勮繘灞曪紝欏圭洰鐨勮妯″湪涓嶆柇鐨勮啫鑳錛屼負浜嗕繚璇侀」鐩殑璐ㄩ噺錛屾湁璁″垝鐨勬墽琛屽叏闈㈢殑鍗曞厓嫻嬭瘯鏄潪甯告湁蹇呰鐨勩備絾鍗曢潬 JUnit 鎻愪緵鐨勬祴璇曞浠跺緢闅捐儨浠昏繖欏瑰伐浣滐紝鍥犱負欏圭洰涓崟鍏冩祴璇曠被鐨勪釜鏁板湪涓嶅仠鐨勫鍔狅紝嫻嬭瘯濂椾歡鍗存棤娉曞姩鎬佺殑璇嗗埆鏂板姞鍏ョ殑鍗曞厓嫻嬭瘯綾伙紝闇瑕佹墜鍔ㄤ慨鏀規祴璇曞浠訛紝榪欐槸涓涓緢瀹規槗閬楀繕寰楁楠わ紝紼嶆湁鐤忓拷灝變細褰卞搷鍏ㄩ潰鍗曞厓嫻嬭瘯鐨勮鐩栫巼銆?/p>

褰撶劧瑙e喅鐨勬柟娉曟湁澶氱澶氭牱錛屽叾涓皢 JUnit 涓庢瀯寤哄埄鍣?Ant 緇撳悎浣跨敤鍙互寰堢畝鍗曠殑瑙e喅榪欎釜闂銆侫nt —— 澶囧彈璧炶獕鐨?Java 鏋勫緩宸ュ叿銆傚畠鍑熷嚭鑹茬殑鏄撶敤鎬с佸鉤鍙版棤鍏蟲т互鍙婂欏圭洰鑷姩嫻嬭瘯鍜岃嚜鍔ㄩ儴緗茬殑鏀寔錛屾垚涓轟紬澶氶」鐩瀯寤鴻繃紼嬩腑涓嶅彲鎴栫己鐨勭嫭绔嬪伐鍏鳳紝騫跺凡緇忔垚涓轟簨瀹炰笂鐨勬爣鍑嗐侫nt 鍐呯疆浜嗗 JUnit 鐨勬敮鎸侊紝瀹冩彁渚涗簡涓や釜 Task錛歫unit 鍜?junitreport錛屽垎鍒敤浜庢墽琛?JUnit 鍗曞厓嫻嬭瘯鍜岀敓鎴愭祴璇曠粨鏋滄姤鍛娿備嬌鐢ㄨ繖涓や釜 Task 緙栧啓鏋勫緩鑴氭湰錛屽彲浠ュ緢綆鍗曠殑瀹屾垚姣忔鍏ㄩ潰鍗曞厓嫻嬭瘯鐨勪換鍔°?/p>

涓嶈繃錛屽湪浣跨敤 Ant 榪愯 JUnit 涔嬪墠錛屾偍闇瑕佺◢浣滀竴浜涢厤緗傛墦寮 Eclipse 棣栭夐」鐣岄潰錛岄夋嫨 Ant -> Runtime 棣栭夐」錛堣 鍥?7錛夛紝灝?JUnit 4.1 鐨?JAR 鏂囦歡娣誨姞鍒?Classpath Tab 欏典腑鐨?Global Entries 璁劇疆欏歸噷銆傝寰楁鏌ヤ竴涓?Ant Home Entries 璁劇疆欏逛腑鐨?Ant 鐗堟湰鏄惁鍦?1.7.0 涔嬩笂錛屽鏋滀笉鏄鏇挎崲涓烘渶鏂扮増鏈殑 Ant JAR 鏂囦歡銆?/p>
鍥?7 Ant Runtime 棣栭夐」
鍥?7 Ant Runtime 棣栭夐」

鍓╀笅鐨勫伐浣滃氨鏄緙栧啓 Ant 鏋勫緩鑴氭湰 build.xml銆傝櫧鐒惰繖涓繃紼嬬◢瀚岀箒鐞愶紝浣嗚繖鏄竴浠朵竴鍔蟲案閫哥殑浜嬫儏銆傜幇鍦ㄦ垜浠氨鎶婂墠闈㈢紪鍐欑殑嫻嬭瘯鐢ㄤ緥閮芥斁緗埌 Ant 鏋勫緩鑴氭湰涓墽琛岋紝涓洪」鐩?coolJUnit 鐨勬瀯寤鴻剼鏈坊鍔犱竴涓嬪唴瀹癸細

 <?xml version="1.0"?> 
 <!-- ============================================= 
     auto unittest task    
     ai92                                                                
     ========================================== --> 
 <project name="auto unittest task" default="junit and report" basedir="."> 

		 <property name="output folder" value="bin"/> 

		 <property name="src folder" value="src"/> 
	
		 <property name="test folder" value="testsrc"/> 
	
		 <property name="report folder" value="report" /> 

		 <!-- - - - - - - - - - - - - - - - - - 
          target: test report folder init                      
         - - - - - - - - - - - - - - - - - --> 
		 <target name="test init"> 
			 <mkdir dir="${report folder}"/> 
		 </target> 
	
		 <!-- - - - - - - - - - - - - - - - - - 
          target: compile                      
         - - - - - - - - - - - - - - - - - --> 
		 <target name="compile"> 
			 <javac srcdir="${src folder}" destdir="${output folder}" /> 
			 <echo>compilation complete!</echo> 
		 </target> 

		 <!-- - - - - - - - - - - - - - - - - - 
          target: compile test cases                      
         - - - - - - - - - - - - - - - - - --> 
		 <target name="test compile" depends="test init"> 
			 <javac srcdir="${test folder}" destdir="${output folder}" /> 
			 <echo>test compilation complete!</echo> 
		 </target> 
	
		 <target name="all compile" depends="compile, test compile"> 
		 </target> 
	
		 <!-- ======================================== 
          target: auto test all test case and output report file                      
      	 ===================================== --> 
		 <target name="junit and report" depends="all compile"> 
			 <junit printsummary="on" fork="true" showoutput="true"> 
				 <classpath> 
					 <fileset dir="lib" includes="**/*.jar"/> 
					 <pathelement path="${output folder}"/> 
				 </classpath> 
				 <formatter type="xml" /> 
				 <batchtest todir="${report folder}"> 
					 <fileset dir="${output folder}"> 
						 <include name="**/Test*.*" /> 
					 </fileset> 
				 </batchtest> 
			 </junit> 
			 <junitreport todir="${report folder}"> 
				 <fileset dir="${report folder}"> 
					 <include name="TEST-*.xml" /> 
				 </fileset> 
				 <report format="frames" todir="${report folder}" /> 
			 </junitreport> 
		 </target> 
 </project> 

Target junit report 鏄?Ant 鏋勫緩鑴氭湰涓殑鏍稿績鍐呭錛屽叾瀹?target 閮芥槸涓哄畠鐨勬墽琛屾彁渚涘墠鏈熸湇鍔°俆ask junit 浼氬鎵捐緭鍑虹洰褰曚笅鎵鏈夊懡鍚嶄互“Test”寮澶寸殑 class 鏂囦歡錛屽茍鎵ц瀹冧滑銆傜揣鎺ョ潃 Task junitreport 浼氬皢鎵ц緇撴灉鐢熸垚 HTML 鏍煎紡鐨勬祴璇曟姤鍛婏紙鍥?8錛夋斁緗湪“report folder”涓嬨?/p>

涓烘暣涓」鐩殑鍗曞厓嫻嬭瘯綾葷‘瀹氫竴縐嶅懡鍚嶉鏍箋備笉浠呮槸鍑轟簬鍖哄垎綾誨埆鐨勮冭檻錛岃繖涓?Ant 鎵歸噺鎵ц鍗曞厓嫻嬭瘯涔熼潪甯告湁甯姪錛屾瘮濡傚墠闈緥瀛愪腑鐨勬祴璇曠被閮藉凡“Test”鎵撳ご錛岃屾祴璇曞浠跺垯浠?#8220;Suite”緇撳熬絳夌瓑銆?/p>
鍥?8 junitreport 鐢熸垚鐨勬祴璇曟姤鍛?/strong>
鍥?8 junitreport 鐢熸垚鐨勬祴璇曟姤鍛? src=

鐜板湪鎵ц涓嬈″叏闈㈢殑鍗曞厓嫻嬭瘯鍙樺緱闈炲父綆鍗曚簡錛屽彧闇瑕佽繍琛屼竴涓?Ant 鏋勫緩鑴氭湰錛屽氨鍙互璧板畬鎵鏈夋祦紼嬶紝騫惰兘寰楀埌涓浠借灝界殑嫻嬭瘯鎶ュ憡銆傛偍鍙互鍦?Ant 鍦ㄧ嚎鎵嬪唽涓幏寰椾笂闈㈡彁鍙婄殑姣忎竴涓?Ant 鍐呯疆 task 鐨勪嬌鐢ㄧ粏鑺傘?/p>


鎬葷粨

闅忕潃瓚婃潵瓚婂鐨勫紑鍙戜漢鍛樺紑濮嬭鍚屽茍鎺ュ彈鏋侀檺緙栫▼錛圶P錛夌殑鎬濇兂錛屽崟鍏冩祴璇曠殑浣滅敤鍦ㄨ蔣浠跺伐紼嬩腑鍙樺緱瓚婃潵瓚婇噸瑕併傛湰鏂囨棬鍦ㄥ皢鏈鏂扮殑鍗曞厓嫻嬭瘯宸ュ叿 JUnit 4 浠嬬粛緇欐偍錛屼互鍙婂浣曠粨鍚?IDE Eclipse 鍜屾瀯寤哄伐鍏?Ant 鍒涘緩鑷姩鍖栧崟鍏冩祴璇曟柟妗堛傚茍涓旇繕鏈熸湜鎮ㄨ兘澶熼氳繃鏈枃“鎰熸煋”涓浜涘ソ鐨勫崟鍏冩祴璇曟剰璇嗭紝鍥犱負 JUnit 鏈韓浠呬粎鏄竴浠藉伐鍏瘋屽凡錛屽畠鐨勭湡姝d紭鍔挎潵鑷簬瀹冪殑鎬濇兂鍜屾妧鏈?/p>

]]>
主站蜘蛛池模板: 无码视频免费一区二三区| a毛片在线看片免费| 成人片黄网站A毛片免费| 亚洲精品午夜视频| 91麻豆国产免费观看| 亚洲日本在线观看| 久久久久免费精品国产小说| 久久精品国产96精品亚洲| 日本亚洲欧洲免费天堂午夜看片女人员 | 噜噜噜亚洲色成人网站| 日韩精品视频免费在线观看| 亚洲国产成人久久精品大牛影视 | a在线免费观看视频| 亚洲国产精品一区二区久久hs| 精品一卡2卡三卡4卡免费视频| 久久综合亚洲色一区二区三区| 嘿嘿嘿视频免费网站在线观看| 亚洲中文字幕无码久久2020| 免费一级毛片女人图片| 男女拍拍拍免费视频网站| 久久久青草青青亚洲国产免观| 最近免费视频中文字幕大全| 国产成人精品日本亚洲11| 国产三级电影免费观看| 野花香高清视频在线观看免费 | 久久九九免费高清视频| 亚洲AV无码专区在线播放中文| 亚州免费一级毛片| 日韩欧美亚洲国产精品字幕久久久 | 国产无遮挡无码视频免费软件| 78成人精品电影在线播放日韩精品电影一区亚洲 | 高h视频在线免费观看| 亚洲精品乱码久久久久久久久久久久| 亚洲精品无码久久毛片| 热99RE久久精品这里都是精品免费| 亚洲精品成人图区| 男人的天堂亚洲一区二区三区| 黄色网址大全免费| 久久久久久亚洲精品成人| 免费视频一区二区| 亚洲一区欧洲一区|