锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
@Before錛?nbsp;
浣跨敤浜嗚鍏冩暟鎹殑鏂規硶鍦ㄦ瘡涓?a title="杞歡嫻嬭瘯鐭ヨ瘑搴? target="_blank" style="color: #df3434; text-decoration-line: none; font-weight: bold;">嫻嬭瘯鏂規硶鎵ц涔嬪墠閮借鎵ц涓嬈°?nbsp;
@After錛?nbsp;
浣跨敤浜嗚鍏冩暟鎹殑鏂規硶鍦ㄦ瘡涓祴璇曟柟娉曟墽琛屼箣鍚庤鎵ц涓嬈°?nbsp;
娉ㄦ剰錛欯Before鍜孈After鏍囩ず鐨勬柟娉曞彧鑳藉悇鏈変竴涓傝繖涓浉褰撲簬鍙栦唬浜咼Unit浠ュ墠鐗堟湰涓殑setUp鍜宼earDown鏂規硶錛屽綋鐒朵綘榪樺彲浠ョ戶緇彨榪欎釜鍚嶅瓧錛屼笉榪嘕Unit涓嶄細闇擱亾鐨勮姹備綘榪欎箞鍋氫簡銆?br />
@Test(expected=*.class)
鍦↗Unit4.0涔嬪墠錛屽閿欒鐨勬祴璇曪紝鎴戜滑鍙兘閫氳繃fail鏉ヤ駭鐢熶竴涓敊璇紝騫跺湪try鍧楅噷闈ssertTrue錛坱rue錛夋潵嫻嬭瘯銆傜幇鍦紝閫氳繃@Test鍏冩暟鎹腑鐨別xpected灞炴с俥xpected灞炴х殑鍊兼槸涓涓紓甯哥殑綾誨瀷
@Test(timeout=xxx):
璇ュ厓鏁版嵁浼犲叆浜嗕竴涓椂闂達紙姣錛夌粰嫻嬭瘯鏂規硶錛?nbsp;
濡傛灉嫻嬭瘯鏂規硶鍦ㄥ埗瀹氱殑鏃墮棿涔嬪唴娌℃湁榪愯瀹岋紝鍒欐祴璇曚篃澶辮觸銆?nbsp;
@ignore錛?nbsp;
璇ュ厓鏁版嵁鏍囪鐨勬祴璇曟柟娉曞湪嫻嬭瘯涓細琚拷鐣ャ傚綋嫻嬭瘯鐨勬柟娉曡繕娌℃湁瀹炵幇錛屾垨鑰呮祴璇曠殑鏂規硶宸茬粡榪囨椂錛屾垨鑰呭湪鏌愮鏉′歡涓嬫墠鑳芥祴璇曡鏂規硶錛堟瘮濡傞渶瑕佷竴涓?a title="MySQL鐭ヨ瘑搴? target="_blank" style="color: #df3434; text-decoration-line: none; font-weight: bold;">鏁版嵁搴?/a>鑱旀帴錛岃屽湪鏈湴嫻嬭瘯鐨勬椂鍊欙紝鏁版嵁搴撳茍娌℃湁榪炴帴錛夛紝閭d箞浣跨敤璇ユ爣絳炬潵鏍囩ず榪欎釜鏂規硶銆傚悓鏃訛紝浣犲彲浠ヤ負璇ユ爣絳句紶閫掍竴涓猄tring鐨勫弬鏁幫紝鏉ヨ〃鏄庝負浠涔堜細蹇界暐榪欎釜嫻嬭瘯鏂?娉曘傛瘮濡傦細@lgnore(“璇ユ柟娉曡繕娌℃湁瀹炵幇”)錛屽湪鎵ц鐨勬椂鍊欙紝浠呬細鎶ュ憡璇ユ柟娉曟病鏈夊疄鐜幫紝鑰屼笉浼氳繍琛屾祴璇曟柟娉曘傘?/p>
涓銆佸寘鍚繀瑕佸湴Package
鏈涓昏鍦頒竴涓?Package灝辨槸org.junit.*錛屾妸瀹冨寘鍚繘鏉ヤ箣鍚庯紝緇濆ぇ閮ㄥ垎鍔熻兘灝辨湁浜嗐傝繕鏈変竴鍙ヨ瘽涔熼潪甯稿湴閲嶈“import static org.junit.Assert.*;”錛屾垜浠湪嫻嬭瘯鐨勬椂鍊欎嬌鐢ㄧ殑涓緋誨垪assertEquals鏂規硶灝辨潵鑷繖涓寘銆傚ぇ瀹舵敞鎰忎竴涓嬶紝榪欐槸涓涓潤鎬佸寘鍚?(static)錛屾槸JDK5涓柊澧炴坊鐨勪竴涓姛鑳姐備篃灝辨槸璇達紝assertEquals鏄疉ssert綾諱腑鐨勪竴緋誨垪鐨勯潤鎬佹柟娉?/p>
浜屻佹祴璇曠被鐨勫0鏄?/strong>
嫻嬭瘯綾繪槸涓涓嫭绔嬬殑綾伙紝娌℃湁浠諱綍鐖剁被銆傛祴璇曠被鐨勫悕瀛椾篃鍙互浠繪剰鍛藉悕錛屾病鏈変換浣曞眬闄愭с傚畠涓庢櫘閫氱被鐨勫尯鍒湪浜庡畠鍐呴儴鐨勬柟娉曠殑澹版槑
涓夈佸垱寤轟竴涓緟嫻嬭瘯鐨勫璞?/strong>
浣犺嫻嬭瘯鍝釜綾伙紝閭d箞浣犻鍏堝氨瑕佸垱寤轟竴涓綾葷殑瀵硅薄銆?/p>
private staticCalculator calculator =newCalculator();
涓轟簡嫻嬭瘯Calculator綾伙紝鎴戜滑蹇呴』鍒涘緩涓涓猚alculator瀵硅薄銆?/p>
鍥涖佹祴璇曟柟娉曠殑澹版槑
鍦ㄦ祴璇曠被涓紝騫朵笉鏄瘡涓涓柟娉曢兘鏄敤浜庢祴璇曠殑錛屼綘蹇呴』浣跨敤“鏍囨敞”鏉ユ槑紜〃鏄庡摢浜涙槸嫻嬭瘯鏂規硶銆?#8220;鏍囨敞”涔熸槸JDK5鐨勪竴涓柊鐗規э紝鐢ㄥ湪姝ゅ闈炲父鎭板綋銆傛垜浠彲浠ョ湅鍒幫紝鍦ㄦ煇浜涙柟娉曠殑鍓嶆湁@Before銆丂Test銆丂Ignore絳夊瓧鏍鳳紝榪欎簺灝辨槸鏍囨敞錛屼互涓涓?#8220;@”浣滀負寮澶淬傝繖浜涙爣娉ㄩ兘鏄疛Unit4鑷畾涔?鐨勶紝鐔熺粌鎺屾彙榪欎簺鏍囨敞鐨勫惈涔夐潪甯擱噸瑕併?/p>
鍏?蹇界暐嫻嬭瘯鏌愪簺灝氭湭瀹屾垚鐨勬柟娉?/strong>
涓冦?Fixture(鏆備笖緲昏瘧涓?#8220;鍥哄畾浠g爜孌?#8221;)
Fixture 鐨勫惈涔夊氨鏄?#8220;鍦ㄦ煇浜涢樁孌靛繀鐒惰璋冪敤鐨勪唬鐮?#8221;銆?#8220;鍦ㄤ換浣曚竴涓祴璇曟墽琛屼箣鍓嶅繀欏繪墽琛岀殑浠g爜”灝辨槸涓涓狥ixture錛屾垜浠敤@Before鏉ユ爣娉ㄥ畠
涓銆?楂樼駭Fixture
涓や釜Fixture鏍囨敞錛屽垎鍒槸@Before鍜孈After錛屾槸鍚﹂傚悎瀹屾垚濡備笅鍔熻兘錛氭湁涓涓被鏄礋璐e澶ф枃浠?瓚呰繃 500鍏?榪涜璇誨啓錛屼粬鐨勬瘡涓涓柟娉曢兘鏄鏂囦歡榪涜鎿嶄綔銆傛崲鍙ヨ瘽璇達紝鍦ㄨ皟鐢ㄦ瘡涓涓柟娉曚箣鍓嶏紝鎴戜滑閮借鎵撳紑涓涓ぇ鏂囦歡騫惰鍏ユ枃浠跺唴瀹癸紝榪欑粷瀵規槸涓涓潪甯歌楄垂鏃墮棿鐨勬搷浣溿傚鏋滄垜浠嬌鐢ˊBefore鍜孈After錛岄偅涔堟瘡嬈℃祴璇曢兘瑕佽鍙栦竴嬈℃枃浠訛紝鏁堢巼鍙婂叾浣庝笅銆傝繖閲屾垜浠墍甯屾湜鐨勬槸鍦ㄦ墍鏈夋祴璇曚竴寮濮嬭涓嬈℃枃浠訛紝 鎵鏈夋祴璇曠粨鏉熶箣鍚庨噴鏀炬枃浠訛紝鑰屼笉鏄瘡嬈℃祴璇曢兘璇繪枃浠躲侸Unit鐨勪綔鑰呮樉鐒朵篃鑰冭檻鍒頒簡榪欎釜闂錛屽畠緇欏嚭浜咢BeforeClass 鍜?@AfterClass涓や釜Fixture鏉ュ府鎴戜滑瀹炵幇榪欎釜鍔熻兘銆備粠鍚嶅瓧涓婂氨鍙互鐪嬪嚭錛岀敤榪欎袱涓狥ixture鏍囨敞鐨勫嚱鏁幫紝鍙湪嫻嬭瘯鐢ㄤ緥鍒濆鍖栨椂鎵ц@BeforeClass鏂規硶錛屽綋鎵鏈夋祴璇曟墽琛屽畬姣曚箣鍚庯紝鎵ц@AfterClass榪涜鏀跺熬宸ヤ綔銆傚湪榪欓噷瑕佹敞鎰忎竴涓嬶紝姣忎釜嫻嬭瘯綾誨彧鑳芥湁涓涓柟娉曡鏍囨敞涓?@BeforeClass鎴朄AfterClass錛屽茍涓旇鏂規硶蹇呴』鏄疨ublic鍜孲tatic鐨勩?/p>
浜屻?闄愭椂嫻嬭瘯
閭d釜姹傚鉤鏂規牴鐨勫嚱鏁版湁Bug錛屾槸涓寰幆錛?/p>
銆銆public voidsquareRoot(intn) ...{
銆銆 for(; ;) ;//Bug : 姝誨驚鐜?/p>
銆銆}
濡傛灉嫻嬭瘯鐨勬椂鍊欓亣鍒版寰幆錛屽浜庨偅浜涢昏緫寰堝鏉傦紝寰幆宓屽姣旇緝娣辯殑紼嬪簭錛屽緢鏈夊彲鑳藉嚭鐜版寰幆錛屽洜姝や竴瀹氳閲囧彇涓浜涢闃叉帾鏂姐傛垜浠粰榪欎簺嫻嬭瘯鍑芥暟璁懼畾涓涓墽琛屾椂闂達紝瓚呰繃浜嗚繖涓椂闂達紝浠栦滑灝變細琚郴緇熷己琛岀粓姝紝騫朵笖緋葷粺榪樹細鍚戜綘姹囨姤璇ュ嚱鏁扮粨鏉熺殑鍘熷洜鏄洜涓鴻秴鏃訛紝榪欐牱浣犲氨鍙互鍙戠幇榪欎簺Bug浜嗐傚彧闇瑕佺粰@Test鏍囨敞鍔犱竴涓弬鏁板嵆鍙紝浠g爜濡備笅錛?/p>
銆銆@Test(timeout = 1000)
銆銆public voidsquareRoot() ...{
銆銆 calculator.squareRoot(4);
銆銆 assertEquals(2,calculator.getResult());
銆銆}
銆銆Timeout鍙傛暟琛ㄦ槑浜嗕綘瑕佽瀹氱殑鏃墮棿錛屽崟浣嶄負姣錛屽洜姝?000灝變唬琛?縐掋?/p>
涓夈?嫻嬭瘯寮傚父
緇忓父浼氱紪鍐欎竴浜涢渶瑕佹姏鍑哄紓甯哥殑鍑芥暟錛屽鏋滀竴涓嚱鏁板簲璇ユ姏鍑哄紓甯革紝浣嗘槸瀹冩病鎶涘嚭錛屽綋鐒舵槸Bug銆備緥濡傦紝鎴戜滑鍐欑殑璁$畻鍣ㄧ被鏈夐櫎娉曞姛鑳斤紝濡傛灉闄ゆ暟鏄竴涓?錛岄偅涔堝繀鐒惰鎶涘嚭“闄?寮傚父”銆傚洜姝わ紝鎴戜滑寰堟湁蹇呰瀵硅繖浜涜繘琛屾祴璇曘備唬鐮佸涓嬶細
銆銆@Test(expected = ArithmeticException.class)
銆銆public void divideByZero() ...{
銆銆 calculator.divide(0);
銆銆}
濡備笂榪頒唬鐮佹墍紺猴紝鎴戜滑闇瑕佷嬌鐢ˊTest鏍囨敞鐨別xpected灞炴э紝灝嗘垜浠媯楠岀殑寮傚父浼犻掔粰浠栵紝榪欐牱JUnit妗嗘灦灝辮兘鑷姩甯垜浠嫻嬫槸鍚︽姏鍑轟簡鎴戜滑鎸囧畾鐨勫紓甯搞?/p>
鍥涖?Runner (榪愯鍣?
鎶婃祴璇曚唬鐮佹彁浜ょ粰JUnit妗嗘灦鍚庯紝妗嗘灦濡備綍鏉ヨ繍琛屼唬鐮佸憿?絳旀灝辨槸——Runner銆傚湪JUnit涓湁寰堝涓?Runner錛屼粬浠礋璐h皟鐢ㄦ祴璇曚唬鐮侊紝姣忎竴涓猂unner閮芥湁鍚勮嚜鐨勭壒孌婂姛鑳斤紝瑕佹牴鎹渶瑕侀夋嫨涓嶅悓鐨凴unner鏉ヨ繍琛屾祴璇曚唬鐮併侸Unit涓湁涓涓粯璁unner錛屽鏋滄病鏈夋寚瀹氾紝閭d箞緋葷粺鑷姩浣跨敤榛樿 Runner鏉ヨ繍琛屼綘鐨勪唬鐮併傛崲鍙ヨ瘽璇達紝涓嬮潰涓ゆ浠g爜鍚箟鏄畬鍏ㄤ竴鏍風殑錛?/p>
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
@RunWith(Suite.class)
@Suite.SuiteClasses({
MyTestCase.class, //嫻嬭瘯綾?/p>
PartSuite.class, //鍙︿竴涓祴璇曞
})
public class AllTestCases {
}
銆 瑕佹兂鎸囧畾涓涓猂unner錛岄渶瑕佷嬌鐢ˊRunWith鏍囨敞錛屽茍涓旀妸浣犳墍鎸囧畾鐨凴unner浣滀負鍙傛暟浼犻掔粰瀹冦傚彟澶栦竴涓娉ㄦ剰鐨?鏄紝@RunWith鏄敤鏉ヤ慨楗扮被鐨勶紝鑰屼笉鏄敤鏉ヤ慨楗板嚱鏁扮殑銆傚彧瑕佸涓涓被鎸囧畾浜哛unner錛岄偅涔堣繖涓被涓殑鎵鏈夊嚱鏁伴兘琚繖涓猂unner鏉ヨ皟鐢ㄣ?/p>
浜斻?鍙傛暟鍖栨祴璇?/strong>
涓涓鑰冭瘯鍒嗘暟榪涜璇勪環鐨勫嚱鏁幫紝榪斿洖鍊煎垎鍒負“浼樼錛岃壇濂斤紝涓鑸紝鍙婃牸錛屼笉鍙婃牸”錛屽洜姝や綘鍦ㄧ紪鍐欐祴璇曠殑鏃跺欙紝鑷沖皯瑕佸啓5涓祴璇曪紝鎶婅繖5涓儏鍐甸兘鍖呭惈浜嗭紝榪?紜疄鏄竴浠跺緢楹葷儲鐨勪簨鎯呫傛垜浠繕浣跨敤鎴戜滑鍏堝墠鐨勪緥瀛愶紝嫻嬭瘯涓涓?#8220;璁$畻涓涓暟鐨勫鉤鏂?#8221;榪欎釜鍑芥暟錛屾殏涓斿垎涓夌被錛氭鏁般?銆佽礋鏁般傛祴璇曚唬鐮佸涓嬶細
importorg.junit.AfterClass;
銆銆importorg.junit.Before;
銆銆importorg.junit.BeforeClass;
銆銆importorg.junit.Test;
銆銆importstatic org.junit.Assert.*;
銆銆public classAdvancedTest ...{
銆銆 private static Calculator calculator =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;鐨勬蹇碉紝鍙啓涓涓祴璇曞嚱鏁幫紝鎶婅繖鑻ュ共縐嶆儏鍐典綔涓哄弬鏁頒紶閫掕繘鍘伙紝涓嬈℃х殑瀹屾垚嫻嬭瘯銆備唬鐮佸涓嬶細
銆銆importstatic org.junit.Assert.assertEquals;
銆銆importorg.junit.Test;
銆銆importorg.junit.runner.RunWith;
銆銆importorg.junit.runners.Parameterized;
銆銆importorg.junit.runners.Parameterized.Parameters;
銆銆importjava.util.Arrays;
銆銆importjava.util.Collection;
銆銆@RunWith(Parameterized.class)
銆銆public classSquareTest{
銆銆private static Calculator calculator = new Calculator();
銆銆 private int param;
銆銆 private int result;
銆銆 @Parameters
銆銆 public static Collection data(){
銆銆 return Arrays.asList(newObject[][]...{
銆銆 {2, 4},
銆銆 {0, 0},
銆銆 {-3, 9},
銆銆 });
銆銆}
//鏋勯犲嚱鏁幫紝瀵瑰彉閲忚繘琛屽垵濮嬪寲
鍏佹柇璦鍜屽亣璁?/strong>
鏂█錛歰rg.junit.Assert鐢ㄤ簬嫻嬭瘯鐢ㄤ緥涓紝濡傛灉鏂█澶辮觸錛岀敤渚嬪嵆緇撴潫銆?/p>
鍋囪錛歰rg.junit.Assume鐢ㄤ簬鍦ㄥ噯澶囩幆澧冩椂鍒ゆ柇鐜鏄惁絎﹀悎瑕佹眰錛屽寘鎷祴璇曞鐨凘BeforeClass錛屾祴璇曠被鐨凘BeforeClass,嫻嬭瘯綾葷殑瀹炰緥鍖栵紝嫻嬭瘯綾葷殑@Before銆?/p>
濡傛灉鍋囪澶辮觸錛屽亣璁炬墍澶勫垵濮嬪寲浠g爜鏂規硶绔嬪嵆緇撴潫錛屾洿娣辯駭鍒殑鍚庣畫宸ヤ綔涔熻蹇界暐錛岀浉鍏蟲祴璇曠敤渚嬭蹇界暐錛屼絾涓庡亣璁懼悓綰у埆鐨勬敹灝懼伐浣滆繕瑕佺戶緇墽琛屻?nbsp;
渚嬪錛氬鏋滃湪嫻嬭瘯綾葷殑@BeforeClass涓亣璁懼け璐ワ紝璇ョ被鐨勫疄渚嬪寲鍙婂瓙綰у埆灝嗚蹇界暐錛孈AfterClass浼氱戶緇墽琛屻?br />
涓冦佸伐紼嬪疄渚?br /> 濡傛灉涓嶆兂鍦ㄥ崟鍏冩祴璇曚腑鎿嶄綔鏁版嵁搴撲腑鐨勬暟鎹傚彲浠ュ湪嫻嬭瘯鏂規硶涓婂姞
@Test