锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲色大成网站www永久网站,亚洲国产一区二区三区在线观看,亚洲欧洲日产国码一级毛片http://m.tkk7.com/hhhaaawwwkkk/category/36169.html瀛︿範絎旇 鍔姏濂嬫枟 zh-cnFri, 28 Nov 2008 10:54:47 GMTFri, 28 Nov 2008 10:54:47 GMT60Junit綆鍗曚緥瀛?/title><link>http://m.tkk7.com/hhhaaawwwkkk/archive/2008/11/25/242596.html</link><dc:creator>鍚戝墠璧扮殑铻冭煿</dc:creator><author>鍚戝墠璧扮殑铻冭煿</author><pubDate>Tue, 25 Nov 2008 09:22:00 GMT</pubDate><guid>http://m.tkk7.com/hhhaaawwwkkk/archive/2008/11/25/242596.html</guid><wfw:comment>http://m.tkk7.com/hhhaaawwwkkk/comments/242596.html</wfw:comment><comments>http://m.tkk7.com/hhhaaawwwkkk/archive/2008/11/25/242596.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/hhhaaawwwkkk/comments/commentRss/242596.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/hhhaaawwwkkk/services/trackbacks/242596.html</trackback:ping><description><![CDATA[     鎽樿: 鏈緥鏄姞鍑忎箻闄よ綆?鍏堢湅涓涓畝鍗曠殑綾籆alculator.java錛? 1package com.test.junit;  2/** *//**  3 *   4 * 鏁板璁$畻  5 *  6 */  7public cla...  <a href='http://m.tkk7.com/hhhaaawwwkkk/archive/2008/11/25/242596.html'>闃呰鍏ㄦ枃</a><img src ="http://m.tkk7.com/hhhaaawwwkkk/aggbug/242596.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/hhhaaawwwkkk/" target="_blank">鍚戝墠璧扮殑铻冭煿</a> 2008-11-25 17:22 <a href="http://m.tkk7.com/hhhaaawwwkkk/archive/2008/11/25/242596.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Junit 鍏ラ棬瀹炰緥http://m.tkk7.com/hhhaaawwwkkk/archive/2008/11/25/242415.html鍚戝墠璧扮殑铻冭煿鍚戝墠璧扮殑铻冭煿Mon, 24 Nov 2008 16:25:00 GMThttp://m.tkk7.com/hhhaaawwwkkk/archive/2008/11/25/242415.htmlhttp://m.tkk7.com/hhhaaawwwkkk/comments/242415.htmlhttp://m.tkk7.com/hhhaaawwwkkk/archive/2008/11/25/242415.html#Feedback0http://m.tkk7.com/hhhaaawwwkkk/comments/commentRss/242415.htmlhttp://m.tkk7.com/hhhaaawwwkkk/services/trackbacks/242415.htmlJUnit 4鏄疛Unit妗嗘灦鏈夊彶浠ユ潵鐨勬渶澶ф敼榪涳紝鍏朵富瑕佺洰鏍囦究鏄埄鐢↗ava 5鐨凙nnotation鐗規(guī)х畝鍖栨祴璇曠敤渚嬬殑緙栧啓銆傝鎴戜滑鐪嬬湅濡備綍浣跨敤JUnit 4鏉ヨ繘琛孶nit嫻嬭瘯銆?/p>

鎴戜滑浣跨敤鐨勫紑鍙戠幆澧冩槸Eclipse 3.2錛屽畠宸茬粡鑷甫浜咼Unit 4.1錛屼綘闇瑕佸皢JUnit 4 Library娣誨姞鍒伴」鐩敤鍒扮殑Library涓傚彟澶栵紝蹇呴』浣跨敤JDK 5.0鎴栨洿楂樼増鏈?/p>

瑕佸湪Eclipse鐜涔嬪榪愯JUnit錛岄渶瑕佷笅杞絁Unit 4.1銆?/p>

鎴戜滑鍏堢湅涓涓畝鍗曠殑Math綾伙細

package com.javaeedev.junit4;
public class
 Math {

    
public int abs(int
 value) {
        
return value>=0 ? value : (-
value);
    }

    
public int div(int a, int
 b) {
        
return a /
 b;
    }

    
/**

     * BUG: if b less than 0!
     
*/
    
public float exp(int a, int b) {
        
float r = 1
;
        
for(int i=0; i<b; i++
)
            r 
= r *
 a;
        
return
 r;
    }
}

娉ㄦ剰exp()鏂規(guī)硶鏄湁Bug鐨勶紝濡傛灉浼犲叆鍙傛暟2, -1錛屽垯鏈熷緟鐨勮繑鍥炲煎簲涓?.5F錛屼絾瀹為檯榪斿洖鍊間負1.0F銆?/p>

涓嬮潰鎴戜滑鐪嬬湅浼犵粺鐨凧Unit鐨凾estCase錛?/p>

public class MathTest extends TestCase {

    
public void setUp() { super
.setUp(); }
    
public void tearDown() { super
.tearDown(); }

    
public void testAbs() { assertTrue(true
); }
    
public void
 testDiv() {...}
    
public void
 testExp() {...}

}

JUnit渚濊禆鍙嶅皠鏉ユ墽琛屾瘡涓互test寮澶寸殑鏂規(guī)硶銆傜劧鑰岋紝鍦ㄦ渶鏂扮殑JUnit 4涓紝鐢變簬鏈変簡Annotation鐨勬敮鎸侊紝鎴戜滑鐨勬祴璇曟柟娉曚笉闇瑕佸啀浠estXxx鏍囪瘑浜嗭紝鑰屾槸鍐欎笂涓涓狜Test鏍囨敞鍗沖彲銆備緥濡傦細

@Test public void doAbs() {...}

鐢氳嚦MathTest綾諱篃涓嶅繀緇ф壙鑷猅estCase銆備綘涔熻浼氭兂鍒幫紝涓嶇戶鎵胯嚜TestCase灝辨棤娉曡皟鐢╝ssertXxx鏂規(guī)硶浜嗭紝姝e洜涓哄姝わ紝鎵鏈夌殑assertXxx鏂規(guī)硶鍏ㄩ儴浠ラ潤鎬佹柟娉曡鏀懼叆浜咥ssert綾伙紝浣跨敤Assert.assertXxx()璋冪敤銆傚鏋滀嬌鐢?/p>

import static org.junit.Assert.*;

鍒欏師鏈夌殑浠g爜涓嶅繀鏀瑰姩銆?/p>

setUp()鍜宼earDown()鏂規(guī)硶涔熶緷璧朄Before鍜孈After鏍囪錛岃繖鏍峰仛鐨勬渶澶х殑濂藉鏄湪緇ф壙浣撶郴鍐呬笉蹇呮媴蹇冨繕璁頒簡鍦╯etUp()鏂規(guī)硶涓皟鐢ㄧ埗綾葷殑super.setUp()鏂規(guī)硶錛孞Unit妗嗘灦浼氳嚜鍔ㄥ鐞嗙埗綾葷殑@Before鍜孈After鏍囪鐨勬柟娉曘?/p>

騫朵笖錛孞Unit妗嗘灦瀵笯Before鍜孈After鐨勮皟鐢ㄩ『搴忕被浼間簬綾葷殑鏋勯犳柟娉曞拰鏋愭瀯鏂規(guī)硶錛屽嵆@Before鎸夌収鐖剁被鍒板瓙綾葷殑欏哄簭璋冪敤錛孈After鍒欑浉鍙嶏紝榪欐牱淇濊瘉浜嗚祫婧愮殑姝g‘鑾峰彇鍜岄噴鏀俱?/p>

褰撶劧錛屼笉鍐嶅己榪繀欏諱嬌鐢╯etUp鍜宼earDown浣滀負鏂規(guī)硶鍚嶏紝鍙互浣跨敤鏇存湁鎰忎箟鐨勬柟娉曞悕錛屼緥濡傦細initDatabase()鍜宑loseDatabase()錛屽彧瑕佸畠浠鏍囨敞浜咢Before鍜孈After鍗沖彲銆?/p>

鏉ョ湅鐪嬩嬌鐢ˋnnotation鐨凪athTest錛?/p>

package com.javaeedev.junit4;

import static org.junit.Assert.*
;

import org.junit.*
;

public class
 MathTest {

    
public
 MathTest() {
        System.out.println(
"new MathTest instance."
);
    }

    @Before
    
public void setUp() throws
 Exception {
        System.out.println(
"call @Before before a test method"
);
    }

    @After
    
public void tearDown() throws
 Exception {
        System.out.println(
"call @After after a test method"
);
    }

    @Test
    
public void
 doAbs() {
        Math math 
= new
 Math();
        assertEquals(
200, math.abs(200
));
        assertEquals(
100, math.abs(-100
));
        assertEquals(
0, math.abs(0
));
    }

    @Test
    
public void
 doDiv() {
        Math math 
= new
 Math();
        assertEquals(
5, math.div(10020
));
        assertEquals(
4, math.div(10021
));
    }

    @Test(expected
=ArithmeticException.class
)
    
public void
 doDiv0() {
        
new Math().div(1270
);
    }

    @Test(timeout
=1
)
    
public void
 doLongTimeTask() {
        
double d = 0
;
        
for(int i=1; i<10000000; i++
)
            d
+=
i;
    }

    @Test
    
public void
 testExp() {
        Math math 
= new
 Math();
        assertEquals(32f, math.exp(
25), 0.001f
);
        assertEquals(1f, math.exp(
20), 0.001f
);
        assertEquals(
0.5f, math.exp(2, (-1)), 0.001f
);
    }

}

瀵規(guī)祴璇曞紓甯革紝JUnit 4鍙互鐢?font face="Courier New" color="#ff0000">expected=Exception.class鏉ユ湡寰呬竴涓鏈熺殑寮傚父錛岃屼笉蹇呯紪鍐?/p>

try {
  ...
  fail(
"No exception"
);
}
catch
(Exception e) {
  
// OK!

}

鏉ョ湅鐪媎oDiv0嫻嬭瘯錛屾垜浠湡寰呬竴涓櫎鏁頒負0鐨凙rithmeticException錛屽洜姝ょ紪鍐欏涓嬫祴璇曟柟娉曪細

@Test(expected=ArithmeticException.class)
public void
 doDiv0() {
    
new Math().div(1270
);
}

瀵逛簬闈炲父鑰楁椂鐨勬祴璇曪紝@Test榪樻湁涓涓猼imeout鏉ユ爣璇嗚鏂規(guī)硶鏈闀挎墽琛屾椂闂達紝瓚呰繃姝ゆ椂闂村嵆琛ㄧず璇ユ祴璇曟柟娉曞け璐ワ細

@Test(timeout=1)
public void
 doLongTimeTask() {
    
double d = 0
;
    
for(int i=1; i<10000000; i++
)
        d
+=
i;
}

浠ヤ笂鏂規(guī)硶鑻ユ墽琛屾椂闂磋秴榪?ms鍒欐祴璇曞け璐ワ紝鐢變簬渚濊禆CPU鐨勬墽琛岄熷害錛屽湪涓嶅悓鐨勬満鍣ㄤ笂嫻嬭瘯緇撴灉涔熶笉鍚屻?/p>

JUnit 4鍙︿竴涓緝澶х殑鍙樺寲鏄紩鍏ヤ簡@BeforeClass鍜孈AfterClass錛屽畠浠湪涓涓猅est綾葷殑鎵鏈夋祴璇曟柟娉曟墽琛屽墠鍚庡悇鎵ц涓嬈°傝繖鏄負浜嗚兘鍦ˊBeforeClass涓垵濮嬪寲涓浜涙槀璐電殑璧勬簮錛屼緥濡傛暟鎹簱榪炴帴錛岀劧鍚庢墽琛屾墍鏈夌殑嫻嬭瘯鏂規(guī)硶錛屾渶鍚庡湪@AfterClass涓噴鏀捐祫婧愩?/p>

姝e浣犺兘鎯沖埌鐨勶紝鐢變簬@BeforeClass鍜孈AfterClass浠呮墽琛屼竴嬈★紝鍥犳瀹冧滑鍙兘鏍囪闈欐佹柟娉曪紝鍦ㄦ墍鏈夋祴璇曟柟娉曚腑鍏變韓鐨勮祫婧愪篃蹇呴』鏄潤鎬佸紩鐢細

private static Object dbConnection;

@BeforeClass
public static void setUpBeforeClass() throws
 Exception {
    System.out.println(
"call @BeforeClass and init database connection"
);
    dbConnection 
= new
 Object();
}

@AfterClass
public static void tearDownAfterClass() throws
 Exception {
    System.out.println(
"call @AfterClass to release database connection"
);
    dbConnection 
= null
;
}

鏈鍚庢墽琛屾祴璇曠敤渚嬶紝鍙互鐪嬪埌緇撴灉錛?/p>

鍚勪釜鏂規(guī)硶鎵ц欏哄簭濡備笅錛?/p>

call @BeforeClass and init database connection

new MathTest instance.
call @Before before a test method
call @After after a test method

new MathTest instance.
call @Before before a test method
call @After after a test method

...

call @AfterClass to release database connection

鍙互鐪嬪埌錛孈BeforeClass鏄湪瀹炰緥鍖朚athTest涔嬪墠璋冪敤鐨勶紝鍥犳涓嶈兘鍦ㄦ瀯閫犳柟娉曚腑鍒濆鍖栧叡浜祫婧愩?/p>

鏈鍚庨渶瑕佹敞鎰忕殑鏄敱浜嶫ava 5鐨勮嚜鍔˙ox/Unbox鐗規(guī)э紝鍦ㄨ皟鐢╝ssertEquals()鏃惰鐗瑰埆娉ㄦ剰錛屽鏋滀綘浼犲叆錛?/p>

assertEquals(100F, 100);

鍒欐寜鐓ц嚜鍔˙ox鍙樹負錛?/p>

assertEquals(new Float(100F), new Integer(100));

嫻嬭瘯澶辮觸錛屽洜涓篎loat綾誨拰Integer綾諱笉鏄悓涓綾誨瀷銆?/p>

鍥犳瑕佺壒鍒敞鎰廸loat鍜宒ouble鐨勬祴璇曘備簨瀹炰笂瀵筬loat鍜宒ouble搴斾嬌鐢?/p>

assertEquals(float, float, float delta);
assertEquals(double, double, double delta);

delta鎸囧畾浜嗕袱涓綔姣旇緝鐨勬誕鐐規(guī)暟鐨勭浉宸寖鍥達紝鍦ㄦ鑼冨洿鍐呯殑涓や釜嫻偣鏁板皢璁や負鐩哥瓑銆傚彲浠ヤ紶鍏ヤ竴涓緢灝忕殑鏁頒緥濡?.0001F銆?nbsp;

JUnit 4闈炲父閫傚悎浣跨敤Java 5鐨勫紑鍙戜漢鍛橈紝浣嗘槸鏃犳硶鍦↗ava 1.4涓幏寰楄繖浜涘ソ澶勶紝騫朵笖錛屼篃涓嶄笌浠ュ墠鐨勭増鏈吋瀹廣傚洜姝わ紝濡傛灉浣犳鍦ㄤ嬌鐢↗ava 5錛屽氨鍙互鑰冭檻浣跨敤JUnit 4鏉ョ紪鍐欐祴璇曘?br />
姝ゆ枃绔犳潵鑷細http://www.javaeedev.com/blog/article.jspx?articleId=ff80808112e766ee011312f144520061



鍚戝墠璧扮殑铻冭煿 2008-11-25 00:25 鍙戣〃璇勮
]]>
JUnit銆乀DD 綆鍗曚粙緇?鍓垏浼樼鐨勬枃绔?http://m.tkk7.com/hhhaaawwwkkk/archive/2008/11/23/242160.html鍚戝墠璧扮殑铻冭煿鍚戝墠璧扮殑铻冭煿Sun, 23 Nov 2008 13:57:00 GMThttp://m.tkk7.com/hhhaaawwwkkk/archive/2008/11/23/242160.htmlhttp://m.tkk7.com/hhhaaawwwkkk/comments/242160.htmlhttp://m.tkk7.com/hhhaaawwwkkk/archive/2008/11/23/242160.html#Feedback0http://m.tkk7.com/hhhaaawwwkkk/comments/commentRss/242160.htmlhttp://m.tkk7.com/hhhaaawwwkkk/services/trackbacks/242160.html涓銆佷竴浜涙蹇墊ч棶棰橈細

鐧界洅嫻嬭瘯鈥斺旀妸嫻嬭瘯瀵硅薄鐪嬩綔涓涓墦寮鐨勭洅瀛愶紝紼嬪簭鍐呴儴鐨勯昏緫緇撴瀯鍜屽叾浠栦俊鎭嫻嬭瘯浜哄憳鏄叕寮鐨勩?
鍥炲綊嫻嬭瘯鈥斺旇蔣浠舵垨鐜鐨勪慨澶嶆垨鏇存鍚庣殑“鍐嶆祴璇?#8221;錛岃嚜鍔ㄦ祴璇曞伐鍏峰榪欑被嫻嬭瘯灝ゅ叾鏈夌敤銆?
鍗曞厓嫻嬭瘯鈥斺旀槸鏈灝忕矑搴︾殑嫻嬭瘯錛屼互嫻嬭瘯鏌愪釜鍔熻兘鎴栦唬鐮佸潡銆備竴鑸敱紼嬪簭鍛樻潵鍋氾紝鍥犱負瀹冮渶瑕佺煡閬撳唴閮ㄧ▼搴忚璁″拰緙栫爜鐨勭粏鑺傘?br />
浜屻佸崟鍏冩祴璇曠殑濂藉 錛?/span>

A銆佹彁楂樺紑鍙戦熷害鈥斺旀祴璇曟槸浠ヨ嚜鍔ㄥ寲鏂瑰紡鎵ц鐨勶紝鎻愬崌浜嗘祴璇曚唬鐮佺殑鎵ц鏁堢巼銆?
B銆佹彁楂樿蔣浠朵唬鐮佽川閲忊斺斿畠浣跨敤灝忕増鏈彂甯冭嚦闆嗘垚錛屼究浜庡疄鐜頒漢鍛橀櫎閿欍傚悓鏃跺紩鍏ラ噸鏋勬蹇碉紝璁╀唬鐮佹洿騫插噣鍜屽瘜鏈夊脊鎬с?
C銆佹彁鍗囩郴緇熺殑鍙俊璧栧害鈥斺斿畠鏄洖褰掓祴璇曠殑涓縐嶃傛敮鎸佷慨澶嶆垨鏇存鍚庣殑“鍐嶆祴璇?#8221;錛屽彲紜繚浠g爜鐨勬紜с?

涓夈佸崟鍏冩祴璇曠殑閽堝瀵硅薄 錛?br />
A銆侀潰鍚戣繃紼嬬殑杞歡寮鍙戦拡瀵硅繃紼嬨?
B銆侀潰鍚戝璞$殑杞歡寮鍙戦拡瀵瑰璞°?
C銆佸彲浠ュ仛綾繪祴璇曪紝鍔熻兘嫻嬭瘯錛屾帴鍙f祴璇曪紙鏈甯哥敤浜庢祴璇曠被涓殑鏂規(guī)硶錛夈?

鍥涖佷笅闈㈡槸JUnit涓浜涚壒鎬х殑鎬葷粨錛?br />  
1) 鎻愪緵鐨凙PI鍙互璁╀綘鍐欏嚭嫻嬭瘯緇撴灉鏄庣‘鐨勫彲閲嶇敤鍗曞厓嫻嬭瘯鐢ㄤ緥
2) 鎻愪緵浜嗕笁縐嶆柟寮忔潵鏄劇ず浣犵殑嫻嬭瘯緇撴灉錛岃屼笖榪樺彲浠ユ墿灞?
3) 鎻愪緵浜嗗崟鍏冩祴璇曠敤渚嬫垚鎵硅繍琛岀殑鍔熻兘
4) 瓚呰交閲忕駭鑰屼笖浣跨敤綆鍗曪紝娌℃湁鍟嗕笟鎬х殑嬈洪獥鍜屾棤鐢ㄧ殑鍚戝
5) 鏁翠釜妗嗘灦璁捐鑹ソ錛屾槗鎵╁睍錛屽涓嶅悓鎬ц川鐨勮嫻嬪璞★紝濡侰lass錛孞sp錛孲ervlet錛孍jb絳夛紝Junit鏈変笉鍚岀殑浣跨敤鎶宸с?br /> 6) 浣跨敤鏂█鏂規(guī)硶鍒ゆ柇鏈熸湜鍊煎拰瀹為檯鍊煎樊寮傦紝榪斿洖Boolean鍊箋?br /> 7) 嫻嬭瘯椹卞姩璁懼浣跨敤鍏卞悓鐨勫垵濮嬪寲鍙橀噺鎴栬呭疄渚嬨?br /> 8) 嫻嬭瘯鍖呯粨鏋勪究浜庣粍緇囧拰闆嗘垚榪愯銆?br /> 9) 鏀寔鍥懼瀷浜や簰妯″紡鍜屾枃鏈氦浜掓ā寮忋?br />
浜斻丣Unit鐨勫ソ澶勫拰JUnit鍗曞厓嫻嬭瘯緙栧啓鍘熷垯錛?/span>

濂藉錛?A銆佸彲浠ヤ嬌嫻嬭瘯浠g爜涓庝駭鍝佷唬鐮佸垎寮銆?nbsp;
              B銆侀拡瀵規(guī)煇涓涓被鐨勬祴璇曚唬鐮侀氳繃杈冨皯鐨勬敼鍔ㄤ究鍙互搴旂敤浜庡彟涓涓被鐨勬祴璇曘?nbsp;
              C銆佹槗浜庨泦鎴愬埌嫻嬭瘯浜哄憳鐨勬瀯寤鴻繃紼嬩腑錛孞Unit鍜孉nt鐨勭粨鍚堝彲浠ュ疄鏂藉閲忓紑鍙戙?nbsp;
              D銆丣Unit鏄叕寮婧愪唬鐮佺殑錛屽彲浠ヨ繘琛屼簩嬈″紑鍙戙?nbsp;
              E銆佸彲浠ユ柟渚垮湴瀵笿Unit榪涜鎵╁睍銆?
緙栧啓鍘熷垯錛?br />               A銆佹槸綆鍖栨祴璇曠殑緙栧啓錛岃繖縐嶇畝鍖栧寘鎷祴璇曟鏋剁殑瀛︿範鍜屽疄闄呮祴璇曞崟鍏冪殑緙栧啓銆?nbsp;
              B銆佹槸浣挎祴璇曞崟鍏冧繚鎸佹寔涔呮с?nbsp;
              C銆佹槸鍙互鍒╃敤鏃㈡湁鐨勬祴璇曟潵緙栧啓鐩稿叧鐨勬祴璇曘?

鍏丣Unit妗嗘灦緇勬垚 錛?/span>

A銆佸嫻嬭瘯鐩爣榪涜嫻嬭瘯鐨勬柟娉曚笌榪囩▼闆嗗悎錛屽彲縐頒負嫻嬭瘯鐢ㄤ緥(TestCase)銆?
B銆佹祴璇曠敤渚嬬殑闆嗗悎錛屽彲瀹圭撼澶氫釜嫻嬭瘯鐢ㄤ緥(TestCase)錛屽皢鍏剁О浣滄祴璇曞寘(TestSuite)銆?
C銆佹祴璇曠粨鏋滅殑鎻忚堪涓庤褰曘?TestResult) 銆?
D銆佹祴璇曡繃紼嬩腑鐨勪簨浠剁洃鍚?TestListener)銆?
E銆佹瘡涓涓祴璇曟柟娉曟墍鍙戠敓鐨勪笌棰勬湡涓嶄竴鑷寸姸鍐電殑鎻忚堪錛岀О鍏舵祴璇曞け璐ュ厓绱?TestFailure)
F銆丣Unit Framework涓殑鍑洪敊寮傚父錛圓ssertionFailedError錛夈?

JUnit妗嗘灦鏄竴涓吀鍨嬬殑Composite妯″紡錛歍estSuite鍙互瀹圭撼浠諱綍媧劇敓鑷猅est鐨勫璞★紱褰撹皟鐢═estSuite瀵硅薄鐨剅un()鏂規(guī)硶鏄紝浼氶亶鍘嗚嚜宸卞綰崇殑瀵硅薄錛岄愪釜璋冪敤瀹冧滑鐨剅un()鏂規(guī)硶

涓冦丣Unit涓父鐢ㄧ殑鎺ュ彛鍜岀被 錛?/span>

1錛塗est鎺ュ彛鈥斺旇繍琛屾祴璇曞拰鏀墮泦嫻嬭瘯緇撴灉
Test鎺ュ彛浣跨敤浜咰omposite璁捐妯″紡錛屾槸鍗曠嫭嫻嬭瘯鐢ㄤ緥 錛圱estCase錛夛紝鑱氬悎嫻嬭瘯妯″紡錛圱estSuite錛夊強嫻嬭瘯鎵╁睍錛圱estDecorator錛夌殑鍏卞悓鎺ュ彛銆?
瀹冪殑public int countTestCases錛堬級鏂規(guī)硶錛屽畠鏉ョ粺璁¤繖嬈℃祴璇曟湁澶氬皯涓猅estCase錛屽彟澶栦竴涓柟娉曞氨鏄痯ublic void銆run錛?TestResult 錛夛紝TestResult鏄疄渚嬫帴鍙楁祴璇曠粨鏋滐紝 run鏂規(guī)硶鎵ц鏈嫻嬭瘯銆?

2錛塗estCase鎶借薄綾燴斺斿畾涔夋祴璇曚腑鍥哄畾鏂規(guī)硶
TestCase鏄疶est鎺ュ彛鐨勬娊璞″疄鐜幫紝錛堜笉鑳借瀹炰緥鍖栵紝鍙兘琚戶鎵匡級鍏舵瀯閫犲嚱鏁癟estCase(string name)鏍規(guī)嵁杈撳叆鐨勬祴璇曞悕縐皀ame鍒涘緩涓涓祴璇曞疄渚嬨傜敱浜庢瘡涓涓猅estCase鍦ㄥ垱寤烘椂閮借鏈変竴涓悕縐幫紝鑻ユ煇嫻嬭瘯澶辮觸浜嗭紝渚垮彲璇嗗埆鍑烘槸鍝釜嫻嬭瘯澶辮觸銆?
TestCase綾諱腑鍖呭惈鐨剆etUp()銆乼earDown()鏂規(guī)硶銆俿etUp()鏂規(guī)硶闆嗕腑鍒濆鍖栨祴璇曟墍闇鐨勬墍鏈夊彉閲忓拰瀹炰緥錛屽茍涓斿湪渚濇璋冪敤嫻嬭瘯綾諱腑鐨勬瘡涓祴璇曟柟娉曚箣鍓嶅啀嬈℃墽琛宻etUp()鏂規(guī)硶銆倀earDown()鏂規(guī)硶鍒欐槸鍦ㄦ瘡涓祴璇曟柟娉曚箣鍚庯紝閲婃斁嫻嬭瘯紼嬪簭鏂規(guī)硶涓紩鐢ㄧ殑鍙橀噺鍜屽疄渚嬨?
寮鍙戜漢鍛樼紪鍐欐祴璇曠敤渚嬫椂錛屽彧闇緇ф壙TestCase錛屾潵瀹屾垚run鏂規(guī)硶鍗沖彲錛岀劧鍚嶫Unit鑾峰緱嫻嬭瘯鐢ㄤ緥錛屾墽琛屽畠鐨剅un鏂規(guī)硶錛屾妸嫻嬭瘯緇撴灉璁板綍鍦═estResult涔嬩腑銆?

3錛堿ssert闈欐佺被鈥斺斾竴緋誨垪鏂█鏂規(guī)硶鐨勯泦鍚?
Assert鍖呭惈浜嗕竴緇勯潤鎬佺殑嫻嬭瘯鏂規(guī)硶錛岀敤浜庢湡鏈涘煎拰瀹為檯鍊兼瘮瀵規(guī)槸鍚︽紜紝鍗蟲祴璇曞け璐ワ紝Assert綾誨氨浼氭姏鍑轟竴涓狝ssertionFailedError寮傚父錛孞Unit嫻嬭瘯妗嗘灦灝嗚繖縐嶉敊璇綊鍏ailes騫跺姞浠ヨ褰曪紝鍚屾椂鏍囧織涓烘湭閫氳繃嫻嬭瘯銆傚鏋滆綾繪柟娉曚腑鎸囧畾涓涓猄tring綾誨瀷鐨勪紶鍙傚垯璇ュ弬鏁板皢琚仛涓篈ssertionFailedError寮傚父鐨勬爣璇嗕俊鎭紝鍛婅瘔嫻嬭瘯浜哄憳鏀瑰紓甯哥殑璇︾粏淇℃伅銆?
JUnit 鎻愪緵浜?澶х被31緇勬柇璦鏂規(guī)硶錛屽寘鎷熀紜鏂█銆佹暟瀛楁柇璦銆佸瓧絎︽柇璦銆佸竷?yōu)當鏂a銆佸璞℃柇璦銆?
鍏朵腑assertEquals錛圤bject expcted,Object actual)鍐呴儴閫昏緫鍒ゆ柇浣跨敤equals()鏂規(guī)硶錛岃繖琛ㄦ槑鏂█涓や釜瀹炰緥鐨勫唴閮ㄥ搱甯屽兼槸鍚︾浉絳夋椂錛屾渶濂戒嬌鐢ㄨ鏂規(guī)硶瀵圭浉搴旂被瀹炰緥鐨勫艱繘琛屾瘮杈冦傝宎ssertSame錛圤bject expected,Object actual錛夊唴閮ㄩ昏緫鍒ゆ柇浣跨敤浜咼ava榪愮畻絎?#8220;==”錛岃繖琛ㄦ槑璇ユ柇璦鍒ゆ柇涓や釜瀹炰緥鏄惁鏉ヨ嚜浜庡悓涓涓紩鐢紙Reference錛夛紝鏈濂戒嬌鐢ㄨ鏂規(guī)硶瀵逛笉鍚岀被鐨勫疄渚嬬殑鍊艱繘琛屾瘮瀵廣俛sserEquals(String message,String expected,String actual)璇ユ柟娉曞涓や釜瀛楃涓茶繘琛岄昏緫姣斿錛屽鏋滀笉鍖歸厤鍒欐樉紺虹潃涓や釜瀛楃涓叉湁宸紓鐨勫湴鏂廣侰omparisonFailure綾繪彁渚涗袱涓瓧絎︿覆鐨勬瘮瀵癸紝涓嶅尮閰嶅垯緇欏嚭璇︾粏鐨勫樊寮傚瓧絎︺?

4錛塗estSuite嫻嬭瘯鍖呯被鈥斺斿涓祴璇曠殑緇勫悎
TestSuite綾昏礋璐g粍瑁呭涓猅est Cases銆傚緟嫻嬪緱綾諱腑鍙兘鍖呮嫭浜嗗琚祴綾葷殑澶氫釜嫻嬭瘯錛岃孴estSuit璐熻矗鏀墮泦榪欎簺嫻嬭瘯錛屼嬌鎴戜滑鍙互鍦ㄤ竴涓祴璇曚腑錛屽畬鎴愬叏閮ㄧ殑瀵硅嫻嬬被鐨勫涓祴璇曘?
TestSuite綾誨疄鐜頒簡Test鎺ュ彛錛屼笖鍙互鍖呭惈鍏跺畠鐨凾estSuites銆傚畠鍙互澶勭悊鍔犲叆Test鏃剁殑鎵鏈夋姏鍑虹殑寮傚父銆?
TestSuite澶勭悊嫻嬭瘯鐢ㄤ緥鏈?涓綰︼紙鍚﹀垯浼氳鎷掔粷鎵ц嫻嬭瘯錛?
A 嫻嬭瘯鐢ㄤ緥蹇呴』鏄叕鏈夌被錛圥ublic錛?
B 嫻嬭瘯鐢ㄤ緥蹇呴』緇ф壙涓嶵estCase綾?
C 嫻嬭瘯鐢ㄤ緥鐨勬祴璇曟柟娉曞繀欏繪槸鍏湁鐨勶紙 Public 錛?
D 嫻嬭瘯鐢ㄤ緥鐨勬祴璇曟柟娉曞繀欏昏澹版槑涓篤oid
E 嫻嬭瘯鐢ㄤ緥涓祴璇曟柟娉曠殑鍓嶇疆鍚嶈瘝蹇呴』鏄痶est
F 嫻嬭瘯鐢ㄤ緥涓祴璇曟柟娉曡浠諱綍浼犻掑弬鏁?

5錛塗estResult緇撴灉綾誨拰鍏跺畠綾諱笌鎺ュ彛
TestResult緇撴灉綾婚泦鍚堜簡浠繪剰嫻嬭瘯绱姞緇撴灉錛岄氳繃TestResult瀹炰緥浼犻掍釜姣忎釜嫻嬭瘯鐨凴un錛堬級鏂規(guī)硶銆俆estResult鍦ㄦ墽琛孴estCase鏄鏋滃け璐ヤ細寮傚父鎶涘嚭
TestListener鎺ュ彛鏄釜浜嬩歡鐩戝惉瑙勭害錛屽彲渚汿estRunner綾諱嬌鐢ㄣ傚畠閫氱煡listener鐨勫璞$浉鍏充簨浠訛紝鏂規(guī)硶鍖呮嫭嫻嬭瘯寮濮媠tartTest(Test test)錛屾祴璇曠粨鏉焑ndTest(Test test),閿欒錛屽鍔犲紓甯竌ddError(Test test,Throwable t)鍜屽鍔犲け璐ddFailure(Test test,AssertionFailedError t)
TestFailure澶辮觸綾繪槸涓?#8220;澶辮觸”鐘跺喌鐨勬敹闆嗙被錛岃В閲婃瘡嬈℃祴璇曟墽琛岃繃紼嬩腑鍑虹幇鐨勫紓甯告儏鍐點傚叾toString()鏂規(guī)硶榪斿洖“澶辮觸”鐘跺喌鐨勭畝瑕佹弿榪般?br />
鍏丣Unit鐨勬墿灞曞簲鐢?nbsp;錛?br />
JUnit + HttpUnit=WEB鍔熻兘嫻嬭瘯宸ュ叿
JUnit + hansel =浠g爜瑕嗙洊嫻嬭瘯宸ュ叿
JUnit + abbot =鐣岄潰鑷姩鍥炴斁嫻嬭瘯宸ュ叿
JUnit + dbunit =鏁版嵁搴撴祴璇曞伐鍏?
JUnit + junitperf=鎬ц兘嫻嬭瘯宸ュ叿

涔?jié)銆佹祴璇曠殑縐嶇被錛?/span>

鍗曞厓嫻嬭瘯錛氭嫻嬫ā鍧楋紙涔熷氨鏄被錛夌殑姝g‘鎬с傚鏋滃璞¢渶瑕佽闂閮ㄧ殑鏁版嵁璧勬簮錛屼緥濡傛暟鎹簱錛屽氨闇瑕佹ā鎷熶竴涓猰ock objects錛屼絾鍦ㄥ疄闄呬腑鐪熷疄鏁版嵁涓庢祴璇曠幆澧冩槸涓嶅悓鐨勩?瀹㈡埛嫻嬭瘯錛氳繖鏄姛鑳芥с佺郴緇熴佸拰楠屾敹嫻嬭瘯銆傜敤鏉ユ祴璇曟暣浣撶殑緋葷粺鐗規(guī)с傚湪XP涓紝榪欎簺嫻嬭瘯鐢辯敤鎴風紪鍐欍?
緇煎悎嫻嬭瘯錛氫粙浜庣敤鎴鋒祴璇曞拰鍗曞厓嫻嬭瘯涔嬮棿鐨勬ˉ姊併傜患鍚堟祴璇曞府鍔╂祴璇曞簲鐢?a class="UBBWordLink" style="color: #000000" target="_blank">紼嬪簭鐨勪氦浜掓с備竴鑸儏鍐典笅錛宮ock objects涓嶈鐢ㄤ簬緇煎悎嫻嬭瘯錛屽畠浼氬鍔犳祴璇曟椂闂淬傚悓鏍鳳紝緇煎悎嫻?br />                     璇曠粡甯鎬緷璧栫壒孌婄殑嫻嬭瘯鐜錛屼緥濡傛暟鎹簱閫佹潵鐨勬祴璇曟暟鎹傜患鍚堟祴璇曚篃闇瑕佺敤鍒板閮ㄧ被搴撱備緥濡備負J2EE搴旂敤紼嬪簭榪涜緇煎悎嫻嬭瘯鐨勭被搴揅actus銆?br /> 寮鍙戜漢鍛樻祴璇曪細榪欐槸鐢ㄦ潵璁╁紑鍙戜漢鍛樻楠岃嚜宸變唬鐮佹垨鏂板嚱鏁扮殑銆傚浜庢瘡涓涓紑鍙戜漢鍛橈紝鍙鏈夊彲鑳斤紝灝遍渶瑕佹湁鏇村鐨勬祴璇曟潵媯楠屼唬鐮併傜粍緇囪繖浜涙祴璇曞拰緇勭粐紼嬪簭浠?/span>鐮佷竴鏍?br />                             閲嶈銆?br />

鍗併佹祴璇曢┍鍔ㄥ紑鍙戯紙TDD錛変紭鍔匡細

TDD鐨勫熀鏈濊礬灝辨槸閫氳繃嫻嬭瘯鏉ユ帹鍔ㄦ暣涓紑鍙戠殑榪涜銆傝屾祴璇曢┍鍔ㄥ紑鍙戞妧鏈茍涓嶅彧鏄崟綰殑嫻嬭瘯宸ヤ綔銆?/span>

闇姹傚悜鏉ュ氨鏄蔣浠跺紑鍙戣繃紼嬩腑鎰熻鏈涓嶅ソ鏄庣‘鎻忚堪銆佹槗鍙樼殑涓滆タ銆傝繖閲岃鐨勯渶姹備笉鍙槸鎸囩敤鎴風殑闇姹傦紝榪樺寘鎷浠g爜鐨勪嬌鐢ㄩ渶姹傘傚緢澶氬紑鍙戜漢鍛樻渶瀹蟲曠殑灝辨槸鍚庢湡榪樿淇敼鏌愪釜綾繪垨鑰呭嚱鏁扮殑鎺ュ彛榪涜淇敼鎴栬呮墿灞曪紝涓轟粈涔堜細鍙戠敓榪欐牱鐨勪簨鎯呭氨鏄洜涓鴻繖閮ㄥ垎浠g爜鐨勪嬌鐢ㄩ渶姹傛病鏈夊緢濂界殑鎻忚堪銆傛祴璇曢┍鍔ㄥ紑鍙戝氨鏄氳繃緙栧啓嫻嬭瘯鐢ㄤ緥錛屽厛鑰冭檻浠g爜鐨勪嬌鐢ㄩ渶姹傦紙鍖呮嫭鍔熻兘銆佽繃紼嬨佹帴鍙g瓑錛夛紝鑰屼笖榪欎釜鎻忚堪鏄棤浜屼箟鐨勶紝鍙墽琛岄獙璇佺殑銆?/span>

閫氳繃緙栧啓榪欓儴鍒嗕唬鐮佺殑嫻嬭瘯鐢ㄤ緥錛屽鍏跺姛鑳界殑鍒嗚В銆佷嬌鐢ㄨ繃紼嬨佹帴鍙i兘榪涜浜嗚璁°傝屼笖榪欑浠庝嬌鐢ㄨ搴﹀浠g爜鐨勮璁¢氬父鏇寸鍚堝悗鏈熷紑鍙戠殑闇姹傘傚彲嫻嬭瘯鐨勮姹傦紝瀵逛唬鐮佺殑鍐呰仛鎬х殑鎻愰珮鍜屽鐢ㄩ兘闈炲父鏈夌泭銆傚洜姝ゆ祴璇曢┍鍔ㄥ紑鍙戜篃鏄竴縐嶄唬鐮佽璁$殑榪囩▼銆?/span>

寮鍙戜漢鍛橀氬父瀵圭紪鍐欐枃妗i潪甯稿帉鐑︼紝浣嗚浣跨敤銆佺悊瑙e埆浜虹殑浠g爜鏃墮氬父鍙堝笇鏈涜兘鏈夋枃妗h繘琛屾寚瀵箋傝屾祴璇曢┍鍔ㄥ紑鍙戣繃紼嬩腑浜х敓鐨勬祴璇曠敤渚嬩唬鐮佸氨鏄浠g爜鐨勬渶濂界殑瑙i噴銆?/span>

蹇箰宸ヤ綔鐨勫熀紜灝辨槸瀵硅嚜宸辨湁淇″績錛屽鑷繁鐨勫伐浣滄垚鏋滄湁淇″績銆傚綋鍓嶅緢澶氬紑鍙戜漢鍛樺嵈緇忓父鍦ㄦ媴蹇冿細“浠g爜鏄惁姝g‘錛?#8221;“杈涜嫤緙栧啓鐨勪唬鐮佽繕鏈夋病鏈変弗閲峛ug錛?#8221;“淇敼鐨勬柊浠g爜瀵瑰叾浠栭儴鍒嗘湁娌℃湁褰卞搷錛?#8221;銆傝繖縐嶆媴蹇冪敋鑷沖鑷存煇浜涗唬鐮佸簲璇ヤ慨鏀瑰嵈涓嶆暍淇敼鐨勫湴姝ャ傛祴璇曢┍鍔ㄥ紑鍙戞彁渚涚殑嫻嬭瘯闆嗗氨鍙互浣滀負浣犱俊蹇冪殑鏉ユ簮銆?/span>

褰撶劧嫻嬭瘯椹卞姩寮鍙戞渶閲嶈鐨勫姛鑳借繕鍦ㄤ簬淇濋殰浠g爜鐨勬紜э紝鑳藉榪呴熷彂鐜般佸畾浣峛ug銆傝岃繀閫熷彂鐜般佸畾浣峛ug鏄緢澶氬紑鍙戜漢鍛樼殑姊︽兂銆傞拡瀵瑰叧閿唬鐮佺殑嫻嬭瘯闆嗭紝浠ュ強涓嶆柇瀹屽杽鐨勬祴璇曠敤渚嬶紝涓鴻繀閫熷彂鐜般佸畾浣峛ug鎻愪緵浜嗘潯浠躲?/span>

鎴戠殑涓孌靛姛鑳介潪甯稿鏉傜殑浠g爜浣跨敤TDD寮鍙戝畬鎴愶紝鐪熷疄鐜搴旂敤涓彧鍙戠幇鍑犱釜bug錛岃屼笖寰堝揩琚畾浣嶈В鍐熾傛?zhèn)ㄥ湪搴旂敤鍚庡Q屼篃涓瀹氫細涓洪偅縐嶈嚜淇$殑寮鍙戣繃紼嬶紝鍔熻兘涓嶆柇澧炲姞銆佸畬鍠勭殑鎰熻錛岃繀閫熷彂鐜般佸畾浣峛ug鐨勮兘鍔涙墍鎰熸煋錛屽枩嬈㈣繖涓妧鏈殑銆?/span>


鍗佷竴銆佹祴璇曢┍鍔ㄥ紑鍙戯紙TDD錛?font style="background-color: #ffffff">鍘熺悊錛?/span>

嫻嬭瘯椹卞姩寮鍙戠殑鍩烘湰鎬濇兂灝辨槸鍦ㄥ紑鍙戝姛鑳戒唬鐮佷箣鍓嶏紝鍏堢紪鍐欐祴璇曚唬鐮併備篃灝辨槸璇村湪鏄庣‘瑕佸紑鍙戞煇涓姛鑳藉悗錛岄鍏堟濊冨浣曞榪欎釜鍔熻兘榪涜嫻嬭瘯錛屽茍瀹屾垚嫻嬭瘯浠g爜鐨勭紪鍐欙紝鐒跺悗緙栧啓鐩稿叧鐨勪唬鐮佹弧瓚寵繖浜涙祴璇曠敤渚嬨傜劧鍚庡驚鐜繘琛屾坊鍔犲叾浠栧姛鑳斤紝鐩村埌瀹屽叏閮ㄥ姛鑳界殑寮鍙戙?/span>

鎴戜滑榪欓噷鎶婅繖涓妧鏈殑搴旂敤棰嗗煙浠庝唬鐮佺紪鍐欐墿灞曞埌鏁翠釜寮鍙戣繃紼嬨傚簲璇ュ鏁翠釜寮鍙戣繃紼嬬殑鍚勪釜闃舵榪涜嫻嬭瘯椹卞姩錛岄鍏堟濊冨浣曞榪欎釜闃舵榪涜嫻嬭瘯銆侀獙璇併佽冩牳錛屽茍緙栧啓鐩稿叧鐨勬祴璇曟枃妗o紝鐒跺悗寮濮嬩笅涓姝ュ伐浣滐紝鏈鍚庡啀楠岃瘉鐩稿叧鐨勫伐浣溿備笅鍥炬槸涓涓瘮杈冩祦琛岀殑嫻嬭瘯妯″瀷錛歏嫻嬭瘯妯″瀷銆?/span>


銆愬浘 V嫻嬭瘯妯″瀷銆?/span>
銆愬浘 V嫻嬭瘯妯″瀷銆? src=

鍦ㄥ紑鍙戠殑鍚勪釜闃舵錛屽寘鎷渶姹傚垎鏋愩佹瑕佽璁°佽緇嗚璁°佺紪鐮佽繃紼嬩腑閮藉簲璇ヨ冭檻鐩稿搴旂殑嫻嬭瘯宸ヤ綔錛屽畬鎴愮浉鍏崇殑嫻嬭瘯鐢ㄤ緥鐨勮璁°佹祴璇曟柟妗堛佹祴璇曡鍒掔殑緙栧啓銆傝繖閲屾彁鍒扮殑寮鍙戦樁孌靛彧鏄婦渚嬶紝鏍規(guī)嵁瀹為檯鐨勫紑鍙戞椿鍔ㄨ繘琛岃皟鏁淬傜浉鍏崇殑嫻嬭瘯鏂囨。涔熶笉涓瀹氭槸闈炲父璇︾粏澶嶆潅鐨勬枃妗o紝鎴栬呬粈涔堝艦寮忥紝浣嗗簲璇?span style="background-color: yellow">鍏繪垚嫻嬭瘯椹卞姩鐨勪範鎯?/span>銆?/span>

鍏充簬嫻嬭瘯妯″瀷錛岃繕鏈塜嫻嬭瘯妯″瀷銆傝繖涓祴璇曟ā鍨嬶紝鎴戣涓猴紝鏄璇︾粏闃舵鍜岀紪鐮侀樁孌佃繘琛屽緩妯★紝搴旇璇存洿璇︾粏鐨勬弿榪頒簡璇︾粏璁捐鍜岀紪鐮侀樁孌電殑寮鍙戣涓恒傚強閽堝鏌愪釜鍔熻兘榪涜瀵瑰簲鐨勬祴璇曢┍鍔ㄥ紑鍙戙?/span>


銆愬浘 X嫻嬭瘯妯″瀷銆?/span>
銆愬浘 X嫻嬭瘯妯″瀷銆? src= 


鍗佷竴銆佹祴璇曢┍鍔ㄥ紑鍙戯紙TDD錛夎繃紼嬶細

杞歡寮鍙戝叾浠栭樁孌電殑嫻嬭瘯椹卞姩寮鍙戯紝鏍規(guī)嵁嫻嬭瘯椹卞姩寮鍙戠殑鎬濇兂瀹屾垚瀵瑰簲鐨勬祴璇曟枃妗e嵆鍙備笅闈㈤拡瀵硅緇嗚璁″拰緙栫爜闃舵榪涜浠嬬粛銆傛祴璇曢┍鍔ㄥ紑鍙戠殑鍩烘湰榪囩▼濡備笅錛?br /> 1錛?鏄庣‘褰撳墠瑕佸畬鎴愮殑鍔熻兘銆傚彲浠ヨ褰曟垚涓涓?TODO 鍒楄〃銆?br /> 2錛?蹇熷畬鎴愰拡瀵規(guī)鍔熻兘鐨勬祴璇曠敤渚嬬紪鍐欍?br /> 3錛?嫻嬭瘯浠g爜緙栬瘧涓嶉氳繃銆?br /> 4錛?緙栧啓瀵瑰簲鐨勫姛鑳戒唬鐮併?br /> 5錛?嫻嬭瘯閫氳繃銆?br /> 6錛?瀵逛唬鐮佽繘琛岄噸鏋勶紝騫朵繚璇佹祴璇曢氳繃銆?br /> 7錛?寰幆瀹屾垚鎵鏈夊姛鑳界殑寮鍙戙?/p>

寮鍙戣繃紼嬩腑錛岄氬父鎶婃祴璇曚唬鐮佸拰鍔熻兘浠g爜鍒嗗紑瀛樻斁錛岃繖閲屾彁渚涗竴涓畝鍗曠殑嫻嬭瘯妗嗘灦浣跨敤渚嬪瓙錛屾?zhèn)ㄥ彲浠ラ氳繃瀹冧簡瑙f祴璇曟鏋剁殑浣跨敤銆備笅闈㈡槸鏂囦歡鍒楄〃銆?/span>

	project/				欏圭洰涓葷洰褰?
project/test			        嫻嬭瘯欏圭洰涓葷洰褰?
project/test/testSeq.cpp		嫻嬭瘯seq_t 鐨勬祴璇曟枃浠訛紝瀵瑰叾浠栧姛鑳芥枃浠剁殑嫻嬭瘯鏂囦歡澶嶅埗鍚庝慨鏀瑰嵆鍙?
project/test/testSeq.h
project/test/Makefile			嫻嬭瘯欏圭洰鐨?Makefile
project/test/main.cpp			嫻嬭瘯欏圭洰鐨勪富鏂囦歡錛屼笉闇瑕佷慨鏀?
project/main.cpp		        欏圭洰鐨勪富鏂囦歡
project/seq_t.h			        鍔熻兘浠g爜錛岃嫻嬭瘯鏂囦歡
project/Makefile		        欏圭洰鐨?Makefile
鍗佷簩銆佹祴璇曢┍鍔ㄥ紑鍙戯紙TDD錛夊師鍒欙細

嫻嬭瘯闅旂銆備笉鍚屼唬鐮佺殑嫻嬭瘯搴旇鐩鎬簰闅旂銆傚涓鍧椾唬鐮佺殑嫻嬭瘯鍙冭檻姝や唬鐮佺殑嫻嬭瘯錛屼笉瑕佽冭檻鍏跺疄鐜扮粏鑺傦紙姣斿瀹冧嬌鐢ㄤ簡鍏朵粬綾葷殑杈圭晫鏉′歡錛夈?/span>

涓欏跺附瀛愩傚紑鍙戜漢鍛樺紑鍙戣繃紼嬩腑瑕佸仛涓嶅悓鐨勫伐浣滐紝姣斿錛氱紪鍐欐祴璇曚唬鐮併佸紑鍙戝姛鑳戒唬鐮併佸浠g爜閲嶆瀯絳夈傚仛涓嶅悓鐨勪簨錛屾壙鎷呬笉鍚岀殑瑙掕壊銆傚紑鍙戜漢鍛樺畬鎴愬搴旂殑宸ヤ綔鏃跺簲璇?br />                     淇濇寔娉ㄦ剰鍔涢泦涓湪褰撳墠宸ヤ綔涓婏紝鑰屼笉瑕佽繃澶氱殑鑰冭檻鍏朵粬鏂歸潰鐨勭粏鑺傦紝淇濊瘉澶翠笂鍙湁涓欏跺附瀛愩傞伩鍏嶈冭檻鏃犲叧緇嗚妭榪囧錛屾棤璋撳湴澧炲姞澶嶆潅搴︺?/span>

嫻嬭瘯鍒楄〃銆傞渶瑕佹祴璇曠殑鍔熻兘鐐瑰緢澶氥傚簲璇ュ湪浠諱綍闃舵鎯蟲坊鍔犲姛鑳介渶姹傞棶棰樻椂錛屾妸鐩稿叧鍔熻兘鐐瑰姞鍒版祴璇曞垪琛ㄤ腑錛岀劧鍚庣戶緇墜澶村伐浣溿傜劧鍚庝笉鏂殑瀹屾垚瀵瑰簲鐨勬祴璇曠敤渚嬨佸姛鑳?br />                     浠g爜銆侀噸鏋勩備竴鏄伩鍏嶇枏婕忥紝涔熼伩鍏嶅共鎵板綋鍓嶈繘琛岀殑宸ヤ綔銆?/span>

嫻嬭瘯椹卞姩銆傝繖涓瘮杈冩牳蹇冦傚畬鎴愭煇涓姛鑳斤紝鏌愪釜綾伙紝棣栧厛緙栧啓嫻嬭瘯浠g爜錛岃冭檻鍏跺浣曚嬌鐢ㄣ佸浣曟祴璇曘傜劧鍚庡湪瀵瑰叾榪涜璁捐銆佺紪鐮併?/span>

鍏堝啓鏂█銆傛祴璇曚唬鐮佺紪鍐欐椂錛屽簲璇ラ鍏堢紪鍐欏鍔熻兘浠g爜鐨勫垽鏂敤鐨勬柇璦璇彞錛岀劧鍚庣紪鍐欑浉搴旂殑杈呭姪璇彞銆?/span>

鍙祴璇曟с傚姛鑳戒唬鐮佽璁°佸紑鍙戞椂搴旇鍏鋒湁杈冨己鐨勫彲嫻嬭瘯鎬с傚叾瀹為伒寰瘮杈冨ソ鐨勮璁″師鍒欑殑浠g爜閮藉叿澶囪緝濂界殑嫻嬭瘯鎬с傛瘮濡傛瘮杈冮珮鐨勫唴鑱氭э紝灝介噺渚濊禆浜庢帴鍙g瓑銆?/span>

鍙婃椂閲嶆瀯銆傛棤璁烘槸鍔熻兘浠g爜榪樻槸嫻嬭瘯浠g爜錛屽緇撴瀯涓嶅悎鐞嗭紝閲嶅鐨勪唬鐮佺瓑鎯呭喌錛屽湪嫻嬭瘯閫氳繃鍚庯紝鍙婃椂榪涜閲嶆瀯銆?/span>

灝忔鍓嶈繘銆傝蔣浠跺紑鍙戞槸涓鏉傛ч潪甯擱珮鐨勫伐浣滐紝寮鍙戣繃紼嬩腑瑕佽冭檻寰堝涓滆タ錛屽寘鎷唬鐮佺殑姝g‘鎬с佸彲鎵╁睍鎬с佹ц兘絳夌瓑錛屽緢澶氶棶棰橀兘鏄洜涓哄鏉傛уお澶у鑷寸殑銆傛瀬闄愮紪紼?br />                     鎻愬嚭浜嗕竴涓潪甯稿ソ鐨勬濊礬灝辨槸灝忔鍓嶈繘銆傛妸鎵鏈夌殑瑙勬ā澶с佸鏉傛ч珮鐨勫伐浣滐紝鍒嗚В鎴愬皬鐨勪換鍔℃潵瀹屾垚銆傚浜庝竴涓被鏉ヨ錛屼竴涓姛鑳戒竴涓姛鑳界殑瀹屾垚錛屽鏋滃お鍥?br />                     闅懼氨鍐嶅垎瑙c傛瘡涓姛鑳界殑瀹屾垚灝辮蛋嫻嬭瘯浠g爜錛嶅姛鑳戒唬鐮侊紞嫻嬭瘯錛嶉噸鏋?/span>鐨勫驚鐜傞氳繃鍒嗚В闄嶄綆鏁翠釜緋葷粺寮鍙戠殑澶嶆潅鎬с傝繖鏍風殑鏁堟灉闈炲父鏄庢樉銆傚嚑涓皬鐨勫姛鑳戒唬鐮?br />                     瀹屾垚鍚庯紝澶х殑鍔熻兘浠g爜鍑犱箮鏄笉鐢ㄨ皟璇曞氨鍙互閫氳繃銆備竴涓釜綾繪柟娉曠殑瀹炵幇錛屽緢蹇氨鐪嬪埌鏁翠釜綾誨緢蹇氨瀹屾垚鍟︺傛湰鏉ユ劅瑙夊緢澶氱壒鎬ч渶瑕佸鍔狅紝寰堝揩灝變細鐪嬪埌娌℃湁
                    鍑犱釜鍟︺備綘鐢氳嚦浼氫負榪欎釜閫熷害鎰熷埌闇囨儕銆傦紙鎴戠悊瑙o紝鏄ぇ騫呭害鍑忓皯璋冭瘯銆佸嚭閿欑殑鏃墮棿浜х敓鐨勮繖縐嶉熷害鎰燂級

鍗佷笁銆佹祴璇曢┍鍔ㄥ紑鍙戯紙TDD錛夋祴璇曟妧鏈細

1. 嫻嬭瘯鑼冨洿銆佺矑搴?br />
瀵瑰摢浜涘姛鑳借繘琛屾祴璇曪紵浼氫笉浼氬お綣佺悙錛熶粈涔堟椂鍊欏彲浠ュ仠姝㈡祴璇曪紵榪欎簺闂姣旇緝甯歌銆傛寜澶у笀 Kent Benk 鐨勮瘽錛屽閭d簺浣犺涓哄簲璇ユ祴璇曠殑浠g爜榪涜嫻嬭瘯銆傚氨鏄錛岃鐩鎬俊鑷繁鐨勬劅瑙夛紝鑷繁鐨勭粡楠屻傞偅浜涢噸瑕佺殑鍔熻兘銆佹牳蹇冪殑浠g爜灝卞簲璇ラ噸鐐規(guī)祴璇曘傛劅鍒扮柌鍔沖氨搴旇鍋滀笅鏉ヤ紤鎭竴涓嬨傛劅瑙夋病鏈夊繀瑕佹洿璇︾粏鐨勬祴璇曪紝灝卞仠姝㈡湰杞祴璇曘?/span>

嫻嬭瘯椹卞姩寮鍙戝己璋冩祴璇曞茍涓嶅簲璇ユ槸璐熸媴錛岃屽簲璇ユ槸甯姪鎴戜滑鍑忚交宸ヤ綔閲忕殑鏂規(guī)硶銆傝屽浜庝綍鏃跺仠姝㈢紪鍐欐祴璇曠敤渚嬶紝涔熸槸搴旇鏍規(guī)嵁浣犵殑緇忛獙錛屽姛鑳藉鏉傘佹牳蹇冨姛鑳界殑浠g爜灝卞簲璇ョ紪鍐欐洿鍏ㄩ潰銆佺粏鑷寸殑嫻嬭瘯鐢ㄤ緥錛屽惁鍒欐祴璇曟祦紼嬪嵆鍙?/span>

嫻嬭瘯鑼冨洿娌℃湁闈欐佺殑鏍囧噯錛屽悓鏃朵篃搴旇鍙互闅忕潃鏃墮棿鏀瑰彉銆傚浜庡紑濮嬫病鏈夌紪鍐欒凍澶熺殑嫻嬭瘯鐨勫姛鑳戒唬鐮侊紝闅忕潃bug鐨勫嚭鐜幫紝鏍規(guī)嵁bug琛ラ綈鐩稿叧鐨勬祴璇曠敤渚嬪嵆鍙?/span>

灝忔鍓嶈繘鐨勫師鍒欙紝瑕佹眰鎴戜滑瀵瑰ぇ鐨勫姛鑳藉潡嫻嬭瘯鏃訛紝搴旇鍏堝垎鎷嗘垚鏇村皬鐨勫姛鑳藉潡榪涜嫻嬭瘯錛屾瘮濡備竴涓被A浣跨敤浜嗙被B銆丆錛屽氨搴旇緙栧啓鍒癆浣跨敤B銆丆鍔熻兘鐨勬祴璇曚唬鐮佸墠錛屽畬鎴愬B銆丆鐨勬祴璇曞拰寮鍙戙傞偅涔堟槸涓嶆槸姣忎釜灝忕被鎴栬呭皬鍑芥暟閮藉簲璇ユ祴璇曞摢錛熸垜璁や負娌℃湁蹇呰銆備綘搴旇榪愮敤浣犵殑緇忛獙錛屽閭d簺鍙兘鍑洪棶棰樼殑鍦版柟閲嶇偣嫻嬭瘯錛屾劅瑙変笉鍙兘鍑洪棶棰樼殑鍦版柟灝辯瓑瀹冪湡姝e嚭闂鐨勬椂鍊欏啀琛ユ祴璇曞惂銆?br />
2. 鎬庝箞緙栧啓嫻嬭瘯鐢ㄤ緥

嫻嬭瘯鐢ㄤ緥鐨勭紪鍐欏氨鐢ㄤ笂浜嗕紶緇熺殑嫻嬭瘯鎶鏈?/span>

  • 鎿嶄綔榪囩▼灝介噺妯℃嫙姝e父浣跨敤鐨勮繃紼嬨?
  • 鍏ㄩ潰鐨勬祴璇曠敤渚嬪簲璇ュ敖閲忓仛鍒板垎鏀鐩栵紝鏍稿績浠g爜灝介噺鍋氬埌璺緞瑕嗙洊銆?
  • 嫻嬭瘯鏁版嵁灝介噺鍖呮嫭錛氱湡瀹炴暟鎹佽竟鐣屾暟鎹?
  • 嫻嬭瘯璇彞鍜屾祴璇曟暟鎹簲璇ュ敖閲忕畝鍗曪紝瀹規(guī)槗鐞嗚В銆?
  • 涓轟簡閬垮厤瀵瑰叾浠栦唬鐮佽繃澶氱殑渚濊禆錛屽彲浠ュ疄鐜扮畝鍗曠殑妗╁嚱鏁版垨妗╃被錛圡ock Object錛夈?
  • 濡傛灉鍐呴儴鐘舵侀潪甯稿鏉傛垨鑰呭簲璇ュ垽鏂祦紼嬭屼笉鏄姸鎬侊紝鍙互閫氳繃璁板綍鏃ュ織瀛楃涓茬殑鏂瑰紡榪涜楠岃瘉銆?/span>

 



]]>
主站蜘蛛池模板: 国产精品亚洲A∨天堂不卡| 亚洲精品国产高清嫩草影院| 亚洲AV无码一区二区二三区软件 | 成人免费无码视频在线网站| 亚洲资源在线观看| 69影院毛片免费观看视频在线| 亚洲AV无码成人网站久久精品大 | 精品人妻系列无码人妻免费视频| 亚洲一级Av无码毛片久久精品| xxxx日本在线播放免费不卡| 在线观看午夜亚洲一区| 国产午夜不卡AV免费| 久久精品九九亚洲精品| 国产免费看JIZZ视频| 久久综合亚洲色hezyo| 免费播放春色aⅴ视频| AAAAA级少妇高潮大片免费看| 国产成人亚洲综合无码精品 | 久久精品无码专区免费青青| 亚洲午夜在线一区| 免费的一级片网站| 日本免费精品一区二区三区 | 永久免费精品影视网站| 亚洲香蕉网久久综合影视| 青青草无码免费一二三区| 国产成人精品亚洲日本在线| 婷婷亚洲天堂影院| 久操免费在线观看| 亚洲中文字幕无码中文字| 亚洲精品国产成人影院| 永久看日本大片免费35分钟| 看亚洲a级一级毛片| 亚洲国产精品嫩草影院在线观看 | 中国videos性高清免费| 亚洲影视一区二区| 又粗又大又猛又爽免费视频| 久久成人无码国产免费播放| 亚洲小说图区综合在线| 国产亚洲一区二区三区在线观看| 成人免费观看一区二区| 国产精品免费看久久久香蕉|