騫跺彂鏁般丵PS銆佸鉤鍧囧搷搴旀椂闂翠笁鑰呬箣闂村叧緋?/p>
<!--[if !supportLists]-->浜屻?nbsp; <!--[endif]-->闄愭椂嫻嬭瘯銆?/p>
榪樿寰楁垜鍦ㄥ垵綰х瘒涓粰鍑虹殑渚嬪瓙鍚楋紝閭d釜姹傚鉤鏂規牴鐨勫嚱鏁版湁Bug錛屾槸涓寰幆錛?/p>
濡傛灉嫻嬭瘯鐨勬椂鍊欓亣鍒版寰幆錛屼綘鐨勮劯涓婄粷瀵逛笉浼氶湶鍑虹瑧瀹廣傚洜姝わ紝瀵逛簬閭d簺閫昏緫寰堝鏉傦紝寰幆宓屽姣旇緝娣辯殑紼嬪簭錛屽緢鏈夊彲鑳藉嚭鐜版寰幆錛屽洜姝や竴瀹氳閲囧彇涓浜涢闃叉帾鏂姐傞檺鏃舵祴璇曟槸涓涓緢濂界殑瑙e喅鏂規銆傛垜浠粰榪欎簺嫻嬭瘯鍑芥暟璁懼畾涓涓墽琛屾椂闂達紝瓚呰繃浜嗚繖涓椂闂達紝浠栦滑灝變細琚郴緇熷己琛岀粓姝紝騫朵笖緋葷粺榪樹細鍚戜綘姹囨姤璇ュ嚱鏁扮粨鏉熺殑鍘熷洜鏄洜涓鴻秴鏃訛紝榪欐牱浣犲氨鍙互鍙戠幇榪欎簺Bug浜嗐傝瀹炵幇榪欎竴鍔熻兘錛屽彧闇瑕佺粰@Test鏍囨敞鍔犱竴涓弬鏁板嵆鍙紝浠g爜濡備笅錛?/p>
Timeout鍙傛暟琛ㄦ槑浜嗕綘瑕佽瀹氱殑鏃墮棿錛屽崟浣嶄負姣錛屽洜姝?000灝變唬琛?縐掋?/p>
<!--[if !supportLists]-->涓夈?nbsp; <!--[endif]-->嫻嬭瘯寮傚父
JAVA涓殑寮傚父澶勭悊涔熸槸涓涓噸鐐癸紝鍥犳浣犵粡甯鎬細緙栧啓涓浜涢渶瑕佹姏鍑哄紓甯哥殑鍑芥暟銆傞偅涔堬紝濡傛灉浣犺寰椾竴涓嚱鏁板簲璇ユ姏鍑哄紓甯革紝浣嗘槸瀹冩病鎶涘嚭錛岃繖綆椾笉綆桞ug鍛紵榪欏綋鐒舵槸Bug錛屽茍JUnit涔熻冭檻鍒頒簡榪欎竴鐐癸紝鏉ュ府鍔╂垜浠壘鍒拌繖縐岯ug銆備緥濡傦紝鎴戜滑鍐欑殑璁$畻鍣ㄧ被鏈夐櫎娉曞姛鑳斤紝濡傛灉闄ゆ暟鏄竴涓?錛岄偅涔堝繀鐒惰鎶涘嚭“闄?寮傚父”銆傚洜姝わ紝鎴戜滑寰堟湁蹇呰瀵硅繖浜涜繘琛屾祴璇曘備唬鐮佸涓嬶細
濡備笂榪頒唬鐮佹墍紺猴紝鎴戜滑闇瑕佷嬌鐢ˊTest鏍囨敞鐨別xpected灞炴э紝灝嗘垜浠媯楠岀殑寮傚父浼犻掔粰浠栵紝榪欐牱JUnit妗嗘灦灝辮兘鑷姩甯垜浠嫻嬫槸鍚︽姏鍑轟簡鎴戜滑鎸囧畾鐨勫紓甯搞?/pre><!--[if !supportLists]--><!--[endif]-->鍥涖?nbsp; Runner (榪愯鍣?
澶у鏈夋病鏈夋兂榪囪繖涓棶棰橈紝褰撲綘鎶婃祴璇曚唬鐮佹彁浜ょ粰JUnit妗嗘灦鍚庯紝妗嗘灦濡備綍鏉ヨ繍琛屼綘鐨勪唬鐮佸憿錛熺瓟妗堝氨鏄斺擱unner銆傚湪JUnit涓湁寰堝涓猂unner錛屼粬浠礋璐h皟鐢ㄤ綘鐨勬祴璇曚唬鐮侊紝姣忎竴涓猂unner閮芥湁鍚勮嚜鐨勭壒孌婂姛鑳斤紝浣犺鏍規嵁闇瑕侀夋嫨涓嶅悓鐨凴unner鏉ヨ繍琛屼綘鐨勬祴璇曚唬鐮併傚彲鑳戒綘浼氳寰楀鎬紝鍓嶉潰鎴戜滑鍐欎簡閭d箞澶氭祴璇曪紝騫舵病鏈夋槑紜寚瀹氫竴涓猂unner鍟婏紵榪欐槸鍥犱負JUnit涓湁涓涓粯璁unner錛屽鏋滀綘娌℃湁鎸囧畾錛岄偅涔堢郴緇熻嚜鍔ㄤ嬌鐢ㄩ粯璁unner鏉ヨ繍琛屼綘鐨勪唬鐮併傛崲鍙ヨ瘽璇達紝涓嬮潰涓ゆ浠g爜鍚箟鏄畬鍏ㄤ竴鏍風殑錛?/p>
import org.junit.internal.runners.TestClassRunner;
import org.junit.runner.RunWith;
![]()
//浣跨敤浜嗙郴緇熼粯璁ょ殑TestClassRunner錛屼笌涓嬮潰浠g爜瀹屽叏涓鏍?br>
public class CalculatorTest ...{
...
}
![]()
![]()
@RunWith(TestClassRunner.class)
public class CalculatorTest ...{
...
}
浠庝笂榪頒緥瀛愬彲浠ョ湅鍑猴紝瑕佹兂鎸囧畾涓涓猂unner錛岄渶瑕佷嬌鐢ˊRunWith鏍囨敞錛屽茍涓旀妸浣犳墍鎸囧畾鐨凴unner浣滀負鍙傛暟浼犻掔粰瀹冦傚彟澶栦竴涓娉ㄦ剰鐨勬槸錛孈RunWith鏄敤鏉ヤ慨楗扮被鐨勶紝鑰屼笉鏄敤鏉ヤ慨楗板嚱鏁扮殑銆傚彧瑕佸涓涓被鎸囧畾浜哛unner錛岄偅涔堣繖涓被涓殑鎵鏈夊嚱鏁伴兘琚繖涓猂unner鏉ヨ皟鐢ㄣ傛渶鍚庯紝涓嶈蹇樹簡鍖呭惈鐩稿簲鐨凱ackage鍝︼紝涓婇潰鐨勪緥瀛愬榪欎竴鐐瑰啓鐨勫緢娓呮浜嗐傛帴涓嬫潵錛屾垜浼氬悜浣犱滑灞曠ず鍏朵粬Runner鐨勭壒鏈夊姛鑳姐?/p>
<!--[if !supportLists]-->浜斻?nbsp; <!--[endif]-->鍙傛暟鍖栨祴璇曘?/p>
浣犲彲鑳介亣鍒拌繃榪欐牱鐨勫嚱鏁幫紝瀹冪殑鍙傛暟鏈夎澶氱壒孌婂鹼紝鎴栬呰浠栫殑鍙傛暟鍒嗕負寰堝涓尯鍩熴傛瘮濡傦紝涓涓鑰冭瘯鍒嗘暟榪涜璇勪環鐨勫嚱鏁幫紝榪斿洖鍊煎垎鍒負“浼樼錛岃壇濂斤紝涓鑸紝鍙婃牸錛屼笉鍙婃牸”錛屽洜姝や綘鍦ㄧ紪鍐欐祴璇曠殑鏃跺欙紝鑷沖皯瑕佸啓5涓祴璇曪紝鎶婅繖5涓儏鍐甸兘鍖呭惈浜嗭紝榪欑‘瀹炴槸涓浠跺緢楹葷儲鐨勪簨鎯呫傛垜浠繕浣跨敤鎴戜滑鍏堝墠鐨勪緥瀛愶紝嫻嬭瘯涓涓?#8220;璁$畻涓涓暟鐨勫鉤鏂?#8221;榪欎釜鍑芥暟錛屾殏涓斿垎涓夌被錛氭鏁般?銆佽礋鏁般傛祴璇曚唬鐮佸涓嬶細
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
![]()
public class AdvancedTest ...{
![]()
private static Calculator calculator 錛?nbsp;new Calculator();
![]()
@Before
public void clearCalculator() ...{
calculator.clear();
}
![]()
@Test
public void square1() ...{
calculator.square(2);
assertEquals(4, calculator.getResult());
}
![]()
@Test
public void square2() ...{
calculator.square(0);
assertEquals(0, calculator.getResult());
}
![]()
@Test
public void square3() ...{
calculator.square(-3);
assertEquals(9, calculator.getResult());
}
![]()
}
涓轟簡綆鍖栫被浼肩殑嫻嬭瘯錛孞Unit4鎻愬嚭浜?#8220;鍙傛暟鍖栨祴璇?#8221;鐨勬蹇碉紝鍙啓涓涓祴璇曞嚱鏁幫紝鎶婅繖鑻ュ共縐嶆儏鍐典綔涓哄弬鏁頒紶閫掕繘鍘伙紝涓嬈℃х殑瀹屾垚嫻嬭瘯銆備唬鐮佸涓嬶細
import static org.junit.Assert.assertEquals;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
![]()
import java.util.Arrays;
import java.util.Collection;
![]()
@RunWith(Parameterized.class)
public class SquareTest ...{
![]()
private static Calculator calculator = new Calculator();
private int param;
private int result;
![]()
@Parameters
public static Collection data() ...{
return Arrays.asList(new Object[][]...{
...{2, 4},
...{0, 0},
...{錛?, 9},
});
}
![]()
![]()
//鏋勯犲嚱鏁幫紝瀵瑰彉閲忚繘琛屽垵濮嬪寲
public SquareTest(int param, int result) ...{
this.param = param;
this.result = result;
}
![]()
@Test
public void square() ...{
calculator.square(param);
assertEquals(result, calculator.getResult());
}
![]()
}
涓嬮潰鎴戜滑瀵逛笂榪頒唬鐮佽繘琛屽垎鏋愩傞鍏堬紝浣犺涓鴻繖縐嶆祴璇曚笓闂ㄧ敓鎴愪竴涓柊鐨勭被錛岃屼笉鑳戒笌鍏朵粬嫻嬭瘯鍏辯敤鍚屼竴涓被錛屾渚嬩腑鎴戜滑瀹氫箟浜嗕竴涓猄quareTest綾匯傜劧鍚庯紝
浣犺涓鴻繖涓被鎸囧畾涓涓猂unner錛岃屼笉鑳戒嬌鐢ㄩ粯璁ょ殑Runner浜嗭紝鍥犱負鐗規畩鐨勫姛鑳借鐢ㄧ壒孌婄殑Runner鍢涖侤RunWith(Parameterized.class)榪欐潯璇彞灝辨槸涓鴻繖涓被鎸?br>瀹氫簡涓涓狿arameterizedRunner銆傜浜屾錛屽畾涔変竴涓緟嫻嬭瘯鐨勭被錛屽茍涓斿畾涔変袱涓彉閲忥紝涓涓敤浜庡瓨鏀懼弬鏁幫紝涓涓敤浜庡瓨鏀炬湡寰呯殑緇撴灉銆傛帴涓嬫潵錛屽畾涔夋祴璇曟暟鎹殑闆嗗悎錛?br>涔熷氨鏄笂榪扮殑data()鏂規硶錛岃鏂規硶鍙互浠繪剰鍛藉悕錛屼絾鏄繀欏諱嬌鐢ˊParameters鏍囨敞榪涜淇グ銆傝繖涓柟娉曠殑妗嗘灦灝變笉浜堣В閲婁簡錛屽ぇ瀹跺彧闇瑕佹敞鎰忓叾涓殑鏁版嵁錛屾槸涓涓簩
緇存暟緇勶紝鏁版嵁涓や袱涓緇勶紝姣忕粍涓殑榪欎袱涓暟鎹紝涓涓槸鍙傛暟錛屼竴涓槸浣犻鏈熺殑緇撴灉銆傛瘮濡傛垜浠殑絎竴緇剓2, 4}錛?灝辨槸鍙傛暟錛?灝辨槸棰勬湡鐨勭粨鏋溿傝繖涓や釜鏁版嵁鐨勯『搴忔棤鎵
璋擄紝璋佸墠璋佸悗閮藉彲浠ャ備箣鍚庢槸鏋勯犲嚱鏁幫紝鍏跺姛鑳藉氨鏄鍏堝墠瀹氫箟鐨勪袱涓弬鏁拌繘琛屽垵濮嬪寲銆傚湪榪欓噷浣犲彲瑕佹敞鎰忎竴涓嬪弬鏁扮殑欏哄簭浜嗭紝瑕佸拰涓婇潰鐨勬暟鎹泦鍚堢殑欏哄簭淇濇寔涓鑷淬?br>濡傛灉鍓嶉潰鐨勯『搴忔槸{鍙傛暟錛屾湡寰呯殑緇撴灉}錛岄偅涔堜綘鏋勯犲嚱鏁扮殑欏哄簭涔熻鏄?#8220;鏋勯犲嚱鏁?鍙傛暟錛?鏈熷緟鐨勭粨鏋?”錛屽弽涔嬩害鐒躲傛渶鍚庡氨鏄啓涓涓畝鍗曠殑嫻嬭瘯渚嬩簡錛屽拰鍓嶉潰浠嬬粛
榪囩殑鍐欐硶瀹屽叏涓鏍鳳紝鍦ㄦ灝變笉澶氳銆?/pre><!--[if !supportLists]-->鍏?nbsp; <!--[endif]-->鎵撳寘嫻嬭瘯銆?/p>
閫氳繃鍓嶉潰鐨勪粙緇嶆垜浠彲浠ユ劅瑙夊埌錛屽湪涓涓」鐩腑錛屽彧鍐欎竴涓祴璇曠被鏄笉鍙兘鐨勶紝鎴戜滑浼氬啓鍑哄緢澶氬緢澶氫釜嫻嬭瘯綾匯傚彲鏄繖浜涙祴璇曠被蹇呴』涓涓竴涓殑鎵ц錛屼篃鏄瘮杈冮夯鐑︾殑浜嬫儏銆傞壌浜庢錛孞Unit涓烘垜浠彁渚涗簡鎵撳寘嫻嬭瘯鐨勫姛鑳斤紝灝嗘墍鏈夐渶瑕佽繍琛岀殑嫻嬭瘯綾婚泦涓搗鏉ワ紝涓嬈℃х殑榪愯瀹屾瘯錛屽ぇ澶х殑鏂逛究浜嗘垜浠殑嫻嬭瘯宸ヤ綔銆傚叿浣撲唬鐮佸涓嬶細
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses(...{
CalculatorTest.class,
SquareTest.class
})
public class AllCalculatorTests ...{
}
澶у鍙互鐪嬪埌錛岃繖涓姛鑳戒篃闇瑕佷嬌鐢ㄤ竴涓壒孌婄殑Runner錛屽洜姝ゆ垜浠渶瑕佸悜@RunWith鏍囨敞浼犻掍竴涓弬鏁癝uite.class銆傚悓鏃訛紝鎴戜滑榪橀渶瑕佸彟澶栦竴涓爣娉ˊSuite.SuiteClasses錛屾潵琛ㄦ槑榪欎釜綾繪槸涓涓墦鍖呮祴璇曠被銆傛垜浠妸闇瑕佹墦鍖呯殑綾諱綔涓哄弬鏁頒紶閫掔粰璇ユ爣娉ㄥ氨鍙互浜嗐傛湁浜嗚繖涓や釜鏍囨敞涔嬪悗錛屽氨宸茬粡瀹屾暣鐨勮〃杈句簡鎵鏈夌殑鍚箟錛屽洜姝や笅闈㈢殑綾誨凡緇忔棤鍏崇揣瑕侊紝闅忎究璧蜂竴涓被鍚嶏紝鍐呭鍏ㄩ儴涓虹┖鏃㈠彲銆?/p>
]]>