ƵµÀÖ±´ï - רÌâ - ÐÂÎÅ - ¼¼ÇÉ - ×éÍø - ¿ª·¢ - °²È« - web±à³Ì - ͼÏñ - ²Ù×÷ϵͳ - Êý¾Ý¿â - ½ÌÓý - ÂÃÓÎ - ½¡¿µ - ʱÉÐ - Çý¶¯ - Èí¼þ - ÓÎÏ· - ¶àýÌå - ERP - ÌÖÂÛ×é

JUnitʵս

À´Ô´£º ×÷Õߣº ³ö´¦£ºÇÉÇɶÁÊé 2006-05-11 ½øÈëÌÖÂÛ×é

ǰÑÔ

ÓÉÓÚÏÖÔÚ¹«Ë¾½øÐÐUnit Test CaseµÄÕûÀí½×¶Î£¬ËùÒÔ³é¿Õ¶ÔJunit½øÐÐÁËÒ»ÏÂÁ˽⣬ÒÔÏÂÊǼ¯ºÏÁËÖÚ¼ÒËù³¤Ö®¾«»ª£¨¿¼ÂǵÄÊǰ´ÎÒµÄ˼·×ܽáµÄ£¬Ò²Ðí²»ÄÜÍêÈ«±í´ï×÷ÕßµÄ˼·£¬ËùÒÔÔÚ¸½Â¼ÖÐÓÐËùÓÐÎҲο¼µÄÎÄÕµØÖ·£¬´ó¼Ò²»·ÁÈ¥¿´¿´Ô­ÎÄ£©¡£

Ò»¡¢²âÊԵĸÅÄî

³¤ÆÚÒÔÀ´£¬ÎÒËù½Ó´¥µÄÈí¼þ¿ª·¢ÈËÔ±ºÜÉÙÓÐÈËÄÜÔÚ¿ª·¢µÄ¹ý³ÌÖнøÐвâÊÔ¹¤×÷¡£´ó²¿·ÖµÄÏîÄ¿¶¼ÊÇÔÚ×îÖÕÑéÊÕµÄʱºò±àд²âÊÔÎĵµ£¬ÓÐЩÏîÄ¿ÉõÖÁûÓвâÊÔÎĵµ¡£ÏÖÔÚÇé¿öÓÐÁ˸ı䡣ÎÒÃÇÒ»Ö±ÌᳫUML¡¢RUP¡¢Èí¼þ¹¤³Ì¡¢CMM£¬Ä¿µÄÖ»ÓÐÒ»¸ö£¬Ìá¸ßÈí¼þ±àдµÄÖÊÁ¿¡£¾ÙÒ»¸ö¼«¶ËµÄÀý×Ó£ºÈç¹ûÄãÊÇÒ»¸ö³¬¼¶³ÌÐòÉè¼ÆÊ¦£¬Ò»¸ö´«Ææ°ãµÄÈËÎÄã¿ÉÒÔÒ»±ßºÈ¿§·È£¬Ò»±ßÌý×ÅÒôÀÖ£¬Í¬Ê±±àдÕâ²Ù×÷ϵͳÖйØÓÚ½ø³Ìµ÷¶ÈµÄÄ£¿é£¬¶øÇÒÁ½Ììʱ¼äÄÚ¾ÍÍê³ÉÁË£¡£©¡£ÎÒÕæµÃ³ÐÈÏ£¬ÓÐÕâÑùµÄÈË£¨ÄǸö±àдUNIXÖеÄvi±à¼­Æ÷µÄ¼Ò»ï¾ÍÊÇÕâÖÖÈË£©¡£È»¶ø·Ç³£Òź¶µÄÊÇÕâЩÉñÏÉÃDz¢Ã»ÓÐÁôÏÂÈκιØÓÚÈçºÎÐÞ³ÉÕý¹ûµÄREADME£¬ËùÒÔÎÒÃÇÕâЩ·²ÈË£­£­ÔÚͬһʱ¼äÖ»Äܽ«×¢ÒâÁ¦¼¯Öе½Èô¸Éµã£¨¾Ý¿ÆÑ§Í³¼Æ£¬ÎÒ²¢²»Ì«ÏàÐÅ£¬Ò»°ãµÄÈËÖ»ÄÜͬʱ¿¼ÂÇ×î¶à7¸ö×óÓÒµÄÎÊÌ⣬¸ßÊÖ¿ÉÒÔ´ïµ½12¸ö×óÓÒ£©£¬¶ø²»ÄܼÈ×ÝÀÀÈ«¾ÖÓÖÁ˽âϸ½Ú£­£­Ö»ÄÜÆÚÍûÓÚÆäËûµÄ·½Ê½À´±£Ö¤ÎÒÃÇËù±àдµÄÈí¼þÖÊÁ¿¡£

ΪÁË˵Ã÷ÎÒÃÇÕâЩ·²ÈËÊÇÈçºÎµÄ±¿¡£ÓÐÒ»¸ö´ÏÃ÷ÈËÌá³öÁËÈí¼þìØ£¨software entropy£©µÄ¸ÅÄһ¸ö³ÌÐò´ÓÉè¼ÆºÜºÃµÄ״̬¿ªÊ¼£¬Ëæ×ÅÐµĹ¦Äܲ»¶ÏµØ¼ÓÈ룬³ÌÐòÖð½¥µØÊ§È¥ÁËÔ­ÓеĽṹ£¬×îÖÕ±ä³ÉÁËÒ»ÍÅÂÒÂé¡£Äã¿ÉÄÜ»áÕù±ç£¬ÔÚÕâ¸öÀý×ÓÖУ¬Éè¼ÆºÜºÃµÄ״̬ʵ¼ÊÉϲ¢²»ºÃ£¬Èç¹ûºÃµÄ»°£¬¾Í²»»á·¢ÉúÄãËù˵µÄÇé¿ö¡£Êǵģ¬¿´À´Äã±ä´ÏÃ÷ÁË£¬¿ÉϧÄ㻹Ӧ¸Ã×¢Òâµ½Á½¸öÎÊÌ⣺1)ÎÒÃDz»ÄÜÖ¸ÍûÔÚ¿ÖÁú¼ÍÔª£¨´ó¸ÅÊÇÊ®Äêǰ£©Éè¼ÆµÄ½á¹¹µ½ÁËÏÖÔÚÒ²ÄÜÊÊÓðɣ»2)ÓµÓÐÇ©×ÖȨµÄ¿Í»§´ú±í¿É²»Àí»á¼ÓÈëÒ»¸öй¦ÄÜÊÇ·ñ»á¶ÔÈí¼þµÄ½á¹¹ÓÐʲôӰÏ죬¼´±ãÓÐÓ°ÏìÒ²ÊdzÌÐòÉè¼ÆÈËÔ±ÐèÒª¿¼ÂǵÄÎÊÌâ¡£Èç¹ûÄã¾Ü¾ø¼ÓÈëÕâ¸öÄãÈÏΪÖÂÃüµÄй¦ÄÜ£¬ÄÇôÄãºÜ¿ÉÄܾÍʧȥÁËÄãµÄס·¿´û¿îºÍÃæ°ü£¨¶ÔÖйú¹¤³ÌʦÀ´ËµÒ²ÐíÊÇÃ×·¹»òÃæÌõ£¬Òª¿´ÄãÊÇÄÏ·½ÈË»¹ÊDZ±·½ÈË£©¡£

ÁíÍ⣬ÐèҪ˵Ã÷µÄÊÇÎÒ¿´¹ýµÄһЩ½²½â²âÊÔµÄÊ鶼ûÓÐÎÒдµÄÕâôÓÐÈËÇé棨²»ºÃÒâ˼...£©¡£ÎÒÏ£Íû¿´µ½ÕâÆªÎÄÕµÄÐֵܽãÃÃÄܺÜÈÝÒ׵ؽÓÊܲâÊԵĸÅÄ²¢¸¶Öîʵʩ¡£ËùÒÔÓÐЩµØ·½Ð´µÄÓÐЩ¿äÕÅ£¬»¶Ó­¶Ô²âÊÔÓÐÉîÈëÀí½âµÄÐֵܽãÃÃÄÜÌå²ìÃñÇ飬²¢²»Áߴͽ̡£

ºÃÁË£¬ÎÒÃÇÏÖÔÚÑÔ¹éÕý´«¡£Òª²âÊÔ£¬¾ÍÒªÃ÷°×²âÊÔµÄÄ¿µÄ¡£ÎÒÈÏΪ²âÊÔµÄÄ¿µÄºÜ¼òµ¥Ò²¼«¾ßÎüÒýÁ¦£ºÐ´³ö¸ßÖÊÁ¿µÄÈí¼þ²¢½â¾öÈí¼þìØÕâÒ»ÎÊÌâ¡£ÏëÏóһϣ¬Èç¹ûÄãдµÄÈí¼þºÍRichard Stallman£¨GNU¡¢FSFµÄÍ·¶ù£©Ð´µÄÒ»ÑùÓÐË®×¼µÄ»°£¬ÊDz»ÊǺÜÓгɾ͸У¿Èç¹ûÄãÒ»Ö±±£³ÖÕâÖÖ¸ßË®×¼£¬ÎÒ±£Ö¤ÄãµÄнˮҲ»áÓÐËù±ä¶¯¡£

²âÊÔÒ²·ÖÀ࣬°×Ïä²âÊÔ¡¢ºÚÏä²âÊÔ¡¢µ¥Ôª²âÊÔ¡¢¼¯³É²âÊÔ¡¢¹¦ÄܲâÊÔ...¡£ÎÒÃÇÏȲ»¹ÜÓжàÉÙ·ÖÀ࣬ÈçºÎ·ÖÀà¡£ÏÈ¿´ÄÇЩ¶ÔÎÒÃÇÓÐÓõķÖÀ࣬¹ØÓÚÆäËûµÄ²âÊÔ£¬ÓÐÐËȤµÄÈ˿ɲÎÔÄÆäËû×ÊÁÏ¡£°×Ïä²âÊÔÊÇÖ¸ÔÚÖªµÀ±»²âÊÔµÄÈí¼þÈçºÎ£¨How£©Íê³É¹¦ÄܺÍÍê³ÉʲôÑù£¨What£©µÄ¹¦ÄܵÄÌõ¼þÏÂËù×÷µÄ²âÊÔ¡£Ò»°ãÊÇÓÉ¿ª·¢ÈËÔ±Íê³É¡£ÒòΪ¿ª·¢ÈËÔ±×îÁ˽â×Ô¼º±àдµÄÈí¼þ¡£±¾ÎÄÒ²ÊÇÒÔ°×Ïä²âÊÔΪÖ÷¡£ºÚÏä²âÊÔÔòÊÇÖ¸ÔÚÖªµÀ±»²âÊÔµÄÈí¼þÍê³ÉʲôÑù£¨What£©µÄ¹¦ÄܵÄÌõ¼þÏÂËù×÷µÄ²âÊÔ¡£Ò»°ãÊÇÓɲâÊÔÈËÔ±Íê³É¡£ºÚÏä²âÊÔ²»ÊÇÎÒÃǵÄÖØµã¡£±¾ÎÄÖ÷Òª¼¯ÖÐÔÚµ¥Ôª²âÊÔÉÏ£¬µ¥Ôª²âÊÔÊÇÒ»ÖÖ°×Ïä²âÊÔ¡£Ä¿µÄÊÇÑéÖ¤Ò»¸ö»òÈô¸É¸öÀàÊÇ·ñ°´ËùÉè¼ÆµÄÄÇÑùÕý³£¹¤×÷¡£¼¯³É²âÊÔÔòÊÇÑéÖ¤ËùÓеÄÀàÊÇ·ñÄÜ»¥ÏàÅäºÏ£¬Ð­Í¬Íê³ÉÌØ¶¨µÄÈÎÎñ£¬Ä¿Ç°ÎÒÃÇÔݲ»¹ØÐÄËü¡£ÏÂÃæÎÒËùÌáµ½µÄ²âÊÔ£¬³ý·ÇÌØ±ð˵Ã÷£¬Ò»°ã¶¼ÊÇÖ¸µ¥Ôª²âÊÔ¡£

ÐèҪǿµ÷µÄÊÇ£º²âÊÔÊÇÒ»¸ö³ÖÐøµÄ¹ý³Ì¡£Ò²¾ÍÊÇ˵²âÊԹᴩÓ뿪·¢µÄÕû¸ö¹ý³ÌÖУ¬µ¥Ôª²âÊÔÓÈÆäÊʺÏÓÚµü´úÔöÁ¿Ê½£¨iterative and incremental£©µÄ¿ª·¢¹ý³Ì¡£Martin Fowler£¨Óеã¶ùÏñÒýÓÿ׷ò×ӵϰ£©ÉõÖÁÈÏΪ£º“ÔÚÄã²»ÖªµÀÈçºÎ²âÊÔ´úÂë֮ǰ£¬¾Í²»Ó¦¸Ã±àд³ÌÐò¡£¶øÒ»µ©ÄãÍê³ÉÁ˳ÌÐò£¬²âÊÔ´úÂëÒ²Ó¦¸ÃÍê³É¡£³ý·Ç²âÊԳɹ¦£¬Äã²»ÄÜÈÏΪÄã±àд³öÁË¿ÉÒÔ¹¤×÷µÄ³ÌÐò¡£”ÎÒ²¢²»Ö¸ÍûËùÓеĿª·¢ÈËÔ±¶¼ÄÜÓÐÈç´Ë¸ßµÄ¾õÎò£¬ÕâÖÖ²ã´ÎÒ²²»ÊÇÒ»õí¶ø¾ÍµÄ¡£µ«ÎÒÃÇÒ»µ©Á˽â²âÊÔµÄÄ¿µÄºÍºÃ´¦£¬×ÔÈ»»á¼á³ÖÔÚ¿ª·¢¹ý³ÌÖÐÒýÈë²âÊÔ¡£ÒòΪÎÒÃÇÊDzâÊÔÐÂÊÖ£¬ÎÒÃÇÒ²²»Àí»áÄÇЩ¸´ÔӵIJâÊÔÔ­Àí£¬ÏÈ˵һ˵×î¼òµ¥µÄ:²âÊÔ¾ÍÊDZȽÏÔ¤ÆÚµÄ½á¹ûÊÇ·ñÓëʵ¼ÊÖ´ÐеĽá¹ûÒ»Ö¡£Èç¹ûÒ»ÖÂÔòͨ¹ý£¬·ñÔòʧ°Ü¡£¿´ÏÂÃæµÄÀý×Ó£º

//½«Òª±»²âÊÔµÄÀà

public class Car

{

public int getWheels()

{

return 4;

}

}

//Ö´ÐвâÊÔµÄÀà

public class testCar

{

public static void main(String[] args)

{

testCar myTest = new testCar();

myTest.testGetWheels();

}

public void testGetWheels ()

{

int expectedWheels = 5;

Car myCar =new Car();

if (expectedWheels==myCar.getWheels())

System.out.println("test [Car]: getWheels works perfected!");

else

System.out.println("test [Car]: getWheels DOESN'T work!");

}

}

Èç¹ûÄãÁ¢¼´¶¯ÊÖдÁËÉÏÃæµÄ´úÂ룬Äã»á·¢ÏÖÁ½¸öÎÊÌ⣺

µÚÒ»£¬Èç¹ûÄãÒªÖ´ÐвâÊÔµÄÀàtestCar£¬Äã±ØÐë±ØÐëÊÖ¹¤ÇÃÈëÈçÏÂÃüÁ

[Windows] D:\>java testCar

[Unix] £¥ java testCar

¼´±ã²âÊÔÈçÀýʾµÄÄÇÑù¼òµ¥£¬ÄãÒ²ÓпÉÄܲ»Ô¸ÔÚÿ´Î²âÊÔµÄʱºò¶¼ÇÃÈëÉÏÃæµÄÃüÁ¶øÏ£ÍûÔÚij¸ö¼¯³É»·¾³ÖÐ(IDE)µã»÷Ò»ÏÂÊó±ê¾ÍÄÜÖ´ÐвâÊÔ¡£ºóÃæµÄÕ½ڻá½éÉܵ½ÕâЩÎÊÌâ¡£

µÚ¶þ£¬Èç¹ûûÓÐÒ»¶¨µÄ¹æ·¶£¬²âÊÔÀàµÄ±àд½«»á³ÉΪÁíÒ»¸öÐèÒª¶¨ÒåµÄ±ê×¼¡£Ã»ÓÐÈËÏ£Íû²é¿´±ðÈËÊÇÈçºÎÉè¼Æ²âÊÔÀàµÄ¡£Èç¹ûÿ¸öÈ˶¼Óв»Í¬µÄÉè¼Æ²âÊÔÀàµÄ·½·¨£¬¹âά»¤±»²âÊÔµÄÀà¾Í¹»·³ÁË£¬Ë­»¹¹ËµÃÉÏά»¤²âÊÔÀࣿÁíÍâÓÐÒ»µãÎÒ²»ÏëÌᣬµ«ÊÇÕâ¸öÎÊÌâÌ«Ã÷ÏÔÁË£¬²âÊÔÀàµÄ´úÂë¶àÓÚ±»²âÊÔµÄÀ࣡ÕâÊÇ·ñÒâζÕâË«±¶µÄ¹¤×÷£¿²»£¡

1) ²»ÂÛ±»²âÊÔÀ࣭Car µÄ getWheels ·½·¨ÈçºÎ¸´ÔÓ£¬²âÊÔÀ࣭testCar µÄtestGetWheels ·½·¨Ö»»á±£³ÖÒ»ÑùµÄ´úÂëÁ¿¡£

2£©Ìá¸ßÈí¼þµÄÖÊÁ¿²¢½â¾öÈí¼þìØÕâÒ»ÎÊÌâ²¢²»ÊÇûÓдú¼ÛµÄ¡£testCar¾ÍÊÇ´ú¼Û¡£

ÎÒÃÇĿǰËùÄÜ×öµÄ¾ÍÊǾ¡Á¿½µµÍËù¸¶³öµÄ´ú¼Û£ºÎÒÃDZàдµÄ²âÊÔ´úÂëÒªÄܱ»Î¬»¤ÈËÔ±ÈÝÒ׵ĶÁÈ¡£¬ÎÒÃDZàд²âÊÔ´úÂëÒªÓÐÒ»¶¨µÄ¹æ·¶¡£×îºÃIDE¹¤¾ß¿ÉÒÔÖ§³ÖÕâЩ¹æ·¶¡£ºÃÁË£¬ÄãËùÐèÒªµÄ¾ÍÊÇJUnit¡£Ò»¸öOpen SourceµÄÏîÄ¿¡£ÓÃÆäÖ÷Ò³ÉϵϰÀ´Ëµ¾ÍÊÇ£º“ JUnitÊÇÓÉ Erich Gamma ºÍ Kent Beck ±àдµÄÒ»¸ö»Ø¹é²âÊÔ¿ò¼Ü£¨regression testing framework£©¡£ÓÃÓÚJava¿ª·¢ÈËÔ±±àдµ¥Ôª²âÊÔÖ®ÓᣔËùν¿ò¼Ü¾ÍÊÇErich Gamma ºÍ Kent Beck ¶¨ÏÂÁËһЩÌõÌõ¿ò¿ò£¬Äã±àдµÄ²âÊÔ´úÂë±ØÐë×ñÑ­Õâ¸öÌõÌõ¿ò¿ò£º¼Ì³Ðij¸öÀ࣬ʵÏÖij¸ö½Ó¿Ú¡£ÆäʵҲ¾ÍÊÇÎÒÃÇÇ°ÃæËù˵µÄ¹æ·¶¡£ºÃÔÚJUnitĿǰµÃµ½ÁË´ó¶àÊýÈí¼þ¹¤³ÌʦµÄÈϿɡ£×ñÑ­JUnitÎÒÃÇ»áµÃµ½ºÜ¶àµÄÖ§³Ö¡£»Ø¹é²âÊÔ¾ÍÊÇÄã²»¶ÏµØ¶ÔËù±àдµÄ´úÂë½øÐвâÊÔ£º±àдһЩ£¬²âÊÔһЩ£¬µ÷ÊÔһЩ£¬È»ºóÑ­»·ÕâÒ»¹ý³Ì£¬Äã»á²»¶ÏµØÖظ´ÏÈǰµÄ²âÊÔ£¬ÄÄÅÂÄãÕý±àдÆäËûµÄÀ࣬ÓÉÓÚÈí¼þìØµÄ´æÔÚ£¬Äã¿ÉÄÜÔÚ±àдµÚÎå¸öÀàµÄʱºò·¢ÏÖ£¬µÚÎå¸öÀàµÄij¸ö²Ù×÷»áµ¼Öµڶþ¸öÀàµÄ²âÊÔʧ°Ü¡£Í¨¹ý»Ø¹é²âÊÔÎÒÃÇץסÁËÕâÌõ´óBug¡£

¶þ¡¢JUnit¼ò½é¼°ÎªÊ²Ã´ÒªÊ¹ÓÃJUint

JUnit¾ÍÊǶԳÌÐò´úÂë½øÐе¥Ôª²âÊÔµÄÒ»ÖÖJava¿ò¼Ü¡£Í¨¹ýÿ´ÎÐ޸ijÌÐòÖ®ºó²âÊÔ´úÂ룬³ÌÐòÔ±¾Í¿ÉÒÔ±£Ö¤´úÂëµÄµÄÉÙÁ¿±ä¶¯²»»áÆÆ»µÕû¸öϵͳ¡£Òª²»ÊÇÓÐJunitÕâÑùµÄ×Ô¶¯»¯²âÊÔ¹¤¾ß£¬´úÂëµÄµÄ·´¸´²âÊÔ¼òÖ±»á°ÑÈËÀÛËÀ¶øÇÒ»¹¿ÉÄܲ»×¼È·¡£ÏÖÔÚºÃÁË£¬²âÊÔ¹ý³Ì¿ÉÒÔÆµ·±½øÐжøÇÒ»¹ÊÇ×Ô¶¯µÄ£¬ËùÒÔÄã¿ÉÒÔÁî³ÌÐò´íÎ󽵵͵½×îÉÙ¡£ËüдµÄÊǵ¥Ôª²âÊÔ£¨Unit Test£©£ºÈí¼þ¹¤³ÌÀïµÄ°×ºÐ²âÊÔ£¬¾ÍÊDzâÊÔij¸öÀàµÄij¸ö·½·¨µÄ¹¦ÄÜ¡£XP ÖÐÍÆ³çµÄ test first design ¾ÍÊÇ»ùÓÚÒÔÉϵļ¼Êõ¡£

Èç¹ûÄãҪдһ¶Î´úÂ룺

1. ÏÈÓà junit д²âÊÔ£¬È»ºóÔÙд´úÂë

2. дÍê´úÂ룬ÔËÐвâÊÔ£¬²âÊÔʧ°Ü

3. Ð޸ĴúÂ룬ÔËÐвâÊÔ£¬Ö±µ½²âÊԳɹ¦

Èç¹ûÒÔºó¶Ô³ÌÐò½øÐÐÐ޸ģ¬ÓÅ»¯ ( refactoring )£¬Ö»ÒªÔÙÔËÐвâÊÔ´úÂ룬Èç¹ûËùÓеIJâÊÔ¶¼³É¹¦£¬Ôò´úÂëÐÞ¸ÄÍê³É¡£

Java Ï嵀 team ¿ª·¢£¬Ò»°ã²ÉÓà cvs(°æ±¾¿ØÖÆ) + ant(ÏîÄ¿¹ÜÀí) + junit(¼¯³É²âÊÔ) µÄģʽ£º

1. ÿÌìÔçÉÏÉϰ࣬ÿ¸ö¿ª·¢ÈËÔ±´Ó cvs server »ñȡһ¸öÕû¸öÏîÄ¿µÄ¹¤×÷¿½±´£»

2. Äõ½×Ô¼ºµÄÈÎÎñ£¬ÏÈÓà junit д½ñÌìµÄÈÎÎñµÄ²âÊÔ´úÂ룻

3. È»ºóд½ñÌìÈÎÎñµÄ´úÂ룬ÔËÐвâÊÔ£¬Ö±µ½²âÊÔͨ¹ý£¬ÈÎÎñÍê³É£»

4. ÔÚϰàǰһÁ½¸öСʱ£¬¸÷¸ö¿ª·¢ÈËÔ±°ÑÈÎÎñÌá½»µ½ cvs server£»

5. È»ºóÓÉÖ÷¹Ü¶ÔÕû¸öÏîÄ¿ÔËÐÐ×Ô¶¯²âÊÔ£¬Äĸö²âÊÔ³ö´í£¬¾ÍÕÒÏà¹ØÈËÔ±Ð޸ģ¬Ö±µ½ËùÓвâÊÔͨ¹ý¡£Ï°à...

ÏÈд²âÊÔ£¬ÔÙд´úÂëµÄºÃ´¦£º

´Ó¼¼ÊõÉÏÇ¿ÖÆÄãÏÈ¿¼ÂÇÒ»¸öÀàµÄ¹¦ÄÜ£¬Ò²¾ÍÊÇÕâ¸öÀàÌṩ¸øÍⲿµÄ½Ó¿Ú£¬¶ø²»ÖÁÓÚÌ«ÔçÏÝÈëËüµÄϸ½Ú¡£ÕâÊÇÃæÏò¶ÔÏóÌᳫµÄÒ»ÖÖÉè¼ÆÔ­Ôò¡£ºÃµÄ²âÊÔÆäʵ¾ÍÊÇÒ»¸öºÃµÄÎĵµ£¬Õâ¸öÀàʹÓÃÕßÍùÍù¿ÉÒÔͨ¹ý²é¿´Õâ¸öÀàµÄ²âÊÔ´úÂëÁ˽âËüµÄ¹¦ÄÜ¡£ÌرðµÄ£¬Èç¹ûÄãÄõ½±ðÈ˵ÄÒ»¸ö³ÌÐò£¬¶ÔËûд²âÊÔÊÇ×îºÃµÄÁ˽âÕâ¸ö³ÌÐòµÄ¹¦Äܵķ½·¨¡£ xpµÄÔ­ÔòÊÇ make it simple£¬²»ÊǺÜÍÆ¼öÁíÍâдÎĵµ£¬ÒòΪÏîÄ¿ÔÚ¿ª·¢¹ý³ÌÖÐÍùÍù´¦Óڱ䶯ÖУ¬Èç¹ûÔÚÔçÆÚдÎĵµ£¬ÒÔºó´úÂë±ä¶¯ºó»¹µÃͬ²½Îĵµ£¬¶àÁËÒ»¸ö¹¤×÷£¬¶øÇÒÓÉÓÚÏîĿʱ¼ä½ôÍùÍùÎĵµÐ´µÄ²»È«»òÓë´úÂë²»Ò»Ö£¬ÓëÆäÕâÑù£¬²»È粻д¡£¶øÈç¹ûÔÚÏîÄ¿½áÊøºóÔÙдÎĵµ£¬¿ª·¢ÈËÔ±ÍùÍùÒѾ­Íü¼Çµ±Ê±Ð´´úÂëʱµÄÖÖÖÖ¿¼ÂÇ£¬¿öÇÒÓÐÏÂÒ»¸öÏîÄ¿µÄѹÁ¦£¬¹ÜÀíÈËÔ±Ò²²»Ô¸ÒâÔÙΪ¾ÉµÄÏîĿдÎĵµ£¬µ¼ÖÂÒÔºóά»¤µÄÎÊÌ⡣ûÓÐÈËÄܱ£Ö¤ÐèÇ󲻱䶯£¬ÒÔÍùÏîÄ¿ÍùÍù¶ÔÐèÇóµÄ±ä¶¯´óΪͷÌÛ£¬º¦ÅÂÕâ¸ö¸Ä¶¯»á´øÀ´ÆäËûµØ·½µÄ´íÎó¡£Îª´Ë£¬³ýÁËÉè¼ÆºÃµÄ½á¹¹ÒÔ·Ö¸îÏîÄ¿Í⣨ËÉñîºÏ£©£¬µ«Èç¹ûÓÐÁ˲âÊÔ£¬²¢ÒѾ­½¨Á¢ÁËÒ»¸öºÃµÄ²âÊÔ¿ò¼Ü£¬¶ÔÓÚÐèÇóµÄ±ä¶¯£¬ÐÞ¸ÄÍê´úÂëºó£¬Ö»ÒªÖØÐÂÔËÐвâÊÔ´úÂ룬Èç¹û²âÊÔͨ¹ý£¬Ò²¾Í±£Ö¤ÁËÐ޸ĵijɹ¦£¬Èç¹û²âÊÔÖгöÏÖ´íÎó£¬Ò²»áÂíÉÏ·¢ÏÖ´íÔÚÄÄÀÐÞ¸ÄÏàÓ¦µÄ²¿·Ö£¬ÔÙÔËÐвâÊÔ£¬Ö±ÖÁ²âÊÔÍêȫͨ¹ý¡£

Èí¼þ¹«Ë¾ÀïÍùÍù´æÔÚ¿ª·¢²¿ÃźͲâÊÔ²¿ÃÅÖ®¼äµÄì¶Ü£ºÓÉÓÚ¿ª·¢ºÍ²âÊÔ·ÖΪÁ½¸ö²¿ÃÅ£¬¶àÁËÒ»²ã¹µÍ¨µÄ³É±¾ºÍʱ¼ä£¬¹µÍ¨ÍùÍù»á²úÉú´íÎóµÄ·¢Éú¡£¶øÇÒ¼«Ò×ÐγÉÒ»¸ö¹ÖȦ£º¿ª·¢ÈËԱΪÁ˸ÏÈÎÎñ£¬Ð´ÁËÀÃÀõĴúÂ룬¾Í°ÑËüÈÓ¸ø²âÊÔÈËÔ±£¬È»ºóдÆäËûµÄÈÎÎñ£¬²âÊÔµ±È»ÊÇʧ°ÜµÄ£¬ÓÖ°Ñ´úÂëÄûØÈ¥ÖØÐ´£¬¶øÇÒÔÚ¹úÄÚÍùÍùÒ»¸öÈí¼þ¹«Ë¾¼¼Êõ×î²îµÄ²¿ÃžÍÊDzâÊÔ²¿ÃÅ£¨ºÃµÄÈ˶¼ÅÜȥд´úÂëÁË£©£¬²âÊԾͳÉÁËÒ»¸öºÜÍ·ÌÛµÄÎÊÌâ¡£ÕâÖÖ¹ÖȦµÄ¸ùÔ´ÊÇÔðÈβ»Ç壬¸ù¾Ý xp ÖеĹ涨£ºÐ´Õâ¸ö´úÂëµÄÈ˱ØÐëΪ×Ô¼ºµÄ´úÂëд²âÊÔ£¬¶øÇÒÖ»ÓвâÊÔͨ¹ý£¬²ÅËãÍê³ÉÕâ¸öÈÎÎñ£¨ÕâÀïµÄ²âÊÔ°üÀ¨ËùÓеIJâÊÔ£¬Èç¹û²âÊÔʱ·¢ÏÖÓÉÓÚÄãµÄ³ÌÐòµ¼Ö±ðµÄÄ£¿éµÄ²âÊÔʧ°Ü£¬ÄãÓÐÔðÈÎ֪ͨÏà¹ØÈËÔ±ÐÞ¸ÄÖ±ÖÁ¼¯³É²âÊÔͨ¹ý£©£¬ÕâÑù¾Í¿ÉÒÔ±ÜÃâÕâÀàÎÊÌâµÄ·¢Éú¡£

Èý¡¢°²×°

1. »ñÈ¡JUnitµÄÈí¼þ°ü£¬´ÓJunit(http://www.junit.org/index.htm»òhttp://download.sourceforge.net/junit/)ÏÂÔØ×îеÄÈí¼þ°ü¡£ÕâÀïÎÒʹÓõÄÊÇhttp://download.sourceforge.net/junit/junit2.zip¡£

2. ½«ÆäÔÚÊʵ±µÄĿ¼Ï½â°ü£¨ÎÒ°²×°ÔÚD:\junit2£©¡£ÕâÑùÔÚ°²×°Ä¿Â¼£¨Ò²¾ÍÊÇÄãËùÑ¡ÔñµÄ½â°üµÄĿ¼£©ÏÂÄãÕÒµ½Ò»¸öÃûΪjunit.jarµÄÎļþ¡£½«Õâ¸öjarÎļþ¼ÓÈëÄãµÄCLASSPATHϵͳ±äÁ¿¡££¨IDEµÄÉèÖûáÓÐËù²»Í¬£¬²Î¿´ÄãËùϲ°®µÄIDEµÄÅäÖÃÖ¸ÄÏ£©JUnit¾Í°²×°ÍêÁË¡£

ËÄ¡¢ÔËÐÐ

ͨ¹ýÇ°ÃæµÄ½éÉÜ£¬ÎÒÃǶÔJUnitÓÐÁËÒ»¸ö´ó¸ÅµÄÂÖÀª¡£ÖªµÀÁËËüÊǸÉʲôµÄ¡£ÏÖÔÚÈÃÎÒÃǶ¯ÊÖ¸ÄдÉÏÃæµÄ²âÊÔÀàtestCarʹÆä·ûºÏJunitµÄ¹æ·¶£­£­ÄÜÔÚJUnitÖÐÔËÐС£

//Ö´ÐвâÊÔµÄÀࣨJUnit°æ£©

import junit.framework.*;

public class testCar extends TestCase

{

protected int expectedWheels;

protected Car myCar;

public testCar(String name)

{

super(name);

}

protected void setUp()

{

expectedWheels = 4;

myCar = new Car();

}

public static Test suite()

{

/** the type safe way */

/*

TestSuite suite= new TestSuite();

suite.addTest(

new testCar("Car.getWheels")

{

protected void runTest()

{

testGetWheels();

}

}

);

return suite;

*/

/** the dynamic way */

return new TestSuite(testCar.class);

}

public void testGetWheels()

{

assertEquals(expectedWheels, myCar.getWheels());

}

}

¸Ä°æºóµÄtestCarÒѾ­ÃæÄ¿È«·Ç¡£ÏÈÈÃÎÒÃÇÁ˽âÕâЩ¸Ä¶¯¶¼ÊÇʲôº¬Ò壬ÔÙ¿´ÈçºÎÖ´ÐÐÕâ¸ö²âÊÔ¡£

1>importÓï¾ä£¬ÒýÈëJUnitµÄÀà¡££¨Ã»ÎÊÌâ°É£©

2>¼Ì³Ð TestCase ¡£¿ÉÒÔÔÝʱ½«Ò»¸öTestCase¿´×÷ÊǶÔij¸öÀà½øÐвâÊԵķ½·¨µÄ¼¯ºÏ¡£Ïêϸ½éÉÜÇë²Î¿´JUnit×ÊÁÏ

3>setUp()É趨Á˽øÐгõʼ»¯µÄÈÎÎñ¡£ÎÒÃÇÒÔºó»á¿´µ½setUp»áÓÐÌØ±ðµÄÓô¦¡£

4>testGetWheeels()¶ÔÔ¤ÆÚµÄÖµºÍmyCar.getWheels()·µ»ØµÄÖµ½øÐбȽϣ¬²¢´òÓ¡±È½ÏµÄ½á¹û¡£assertEqualsÊÇjunit.framework.AssertÖÐËù¶¨ÒåµÄ·½·¨£¬junit.framework.TestCase¼Ì³ÐÁËjunit.framework.Assert¡£

5>suite()ÊÇÒ»¸öºÜÌØÊâµÄ¾²Ì¬·½·¨¡£JUnitµÄTestRunner»áµ÷ÓÃsuite·½·¨À´È·¶¨ÓжàÉÙ¸ö²âÊÔ¿ÉÒÔÖ´ÐС£ÉÏÃæµÄÀý×ÓÏÔʾÁËÁ½ÖÖ·½·¨£º¾²Ì¬µÄ·½·¨Êǹ¹ÔìÒ»¸öÄÚ²¿À࣬²¢ÀûÓù¹Ô캯Êý¸ø¸Ã²âÊÔÃüÃû(test name, Èç Car.getWheels)£¬Æä¸²¸ÇµÄrunTest()·½·¨£¬Ö¸Ã÷Á˸òâÊÔÐèÒªÖ´ÐÐÄÇЩ·½·¨£­£­testGetWheels()¡£¶¯Ì¬µÄ·½·¨ÊÇÀûÓÃÄÚÊ¡£¨reflection£©À´ÊµÏÖrunTest()£¬ÕÒ³öÐèÒªÖ´ÐÐÄÇЩ²âÊÔ¡£´Ëʱ²âÊÔµÄÃû×Ö¼´ÊDzâÊÔ·½·¨£¨test method£¬ÈçtestGetWheels£©µÄÃû×Ö¡£JUnit»á×Ô¶¯ÕÒ³ö²¢µ÷ÓøÃÀàµÄ²âÊÔ·½·¨¡£

6>½«TestSuite¿´×÷Êǰü¹ü²âÊÔµÄÒ»¸öÈÝÆ÷¡£Èç¹û½«²âÊÔ±È×÷Ò¶×Ó½ÚµãµÄ»°£¬TestSuite¾ÍÊÇ·ÖÖ§½Úµã¡£Êµ¼ÊÉÏTestCase£¬TestSuiteÒÔ¼°TestSuite×é³ÉÁËÒ»¸öcomposite Pattern¡£JUnitµÄÎĵµÖÐÓÐһƪרÃŽ²½âÈçºÎʹÓÃPattern¹¹ÔìJunit¿ò¼Ü¡£ÓÐÐËȤµÄÅóÓÑ¿ÉÒԲ鿴JUnit×ÊÁÏ¡£

ÈçºÎÔËÐиòâÊÔÄØ£¿ÊÖ¹¤µÄ·½·¨ÊǼüÈëÈçÏÂÃüÁ

[Windows] D:\>java junit.textui.TestRunner testCar

[Unix] £¥ java junit.textui.TestRunner testCar

±ðµ£ÐÄÄãÒªÇõÄ×Ö·ûÁ¿£¬ÒÔºóÔÚIDEÖУ¬Ö»Òªµã¼¸ÏÂÊó±ê¾Í³ÉÁË¡£ÔËÐнá¹ûÓ¦¸ÃÈçÏÂËùʾ£¬±íÃ÷Ö´ÐÐÁËÒ»¸ö²âÊÔ£¬²¢Í¨¹ýÁ˲âÊÔ£º

.

Time: 0

OK (1 tests)

Èç¹ûÎÒÃǽ«Car.getWheels()Öзµ»ØµÄµÄÖµÐÞ¸ÄΪ3£¬Ä£Äâ³ö´íµÄÇéÐΣ¬Ôò»áµÃµ½ÈçϽá¹û£º

.F

Time: 0.16

FAILURES!!!

Test Results:

Run: 1 Failures: 1 Errors: 0

There was 1 failure:

1) testCar.testGetWheels "expected:<3> but was:<4>"

×¢Ò⣺TimeÉϵÄСµã±íʾ²âÊÔ¸öÊý£¬Èç¹û²âÊÔͨ¹ýÔòÏÔʾOK¡£·ñÔòÔÚСµãµÄºó±ß±êÉÏF£¬±íʾ¸Ã²âÊÔʧ°Ü¡£×¢Ò⣬ÔÚÄ£Äâ³ö´íµÄ²âÊÔÖУ¬ÎÒÃÇ»áµÃµ½ÏêϸµÄ²âÊÔ±¨¸æ“expected:<3> but was:<4>”£¬Õâ×ãÒÔ¸æËßÎÒÃÇÎÊÌâ·¢ÉúÔںδ¦¡£ÏÂÃæ¾ÍÊÇÄãµ÷ÊÔ£¬²âÊÔ£¬µ÷ÊÔ£¬²âÊÔ...µÄ¹ý³Ì£¬Ö±ÖÁµÃµ½ÆÚÍûµÄ½á¹û¡£

Îå¡¢Design by Contract£¨Õâ¾ä»°ÎÒû·¨·­Ò룩

Design by Contract±¾ÊÇBertrand Meyer£¨EiffelÓïÑԵĴ´Ê¼ÈË£©¿ª·¢µÄÒ»ÖÖÉè¼Æ¼¼Êõ¡£ÎÒ·¢ÏÖÔÚJUnitÖÐʹÓÃDesign by Contract»á´øÀ´ÒâÏë²»µ½µÄЧ¹û¡£Design by ContractµÄºËÐÄÊǶÏÑÔ£¨assersion£©¡£¶ÏÑÔÊÇÒ»¸ö²¼¶ûÓï¾ä£¬¸ÃÓï¾ä²»ÄÜΪ¼Ù£¬Èç¹ûΪ¼Ù£¬Ôò±íÃ÷³öÏÖÁËÒ»¸öbug¡£Design by ContractʹÓÃÈýÖÖ¶ÏÑÔ£ºÇ°ÖÃÌõ¼þ£¨pre-conditions£©¡¢ºóÖÃÌõ¼þ£¨post-conditions£©ºÍ²»±äʽ£¨invariants£©ÕâÀï²»´òËãÏêϸÌÖÂÛDesign by ContractµÄϸ½Ú£¬¶øÊÇÏ£ÍûÆäÔÚ²âÊÔÖÐÄÜ·¢»ÓÆä×÷Óá£

ǰÖÃÌõ¼þÔÚÖ´ÐвâÊÔ֮ǰ¿ÉÒÔÓÃÓÚÅжÏÊÇ·ñÔÊÐí½øÈë²âÊÔ£¬¼´½øÈë²âÊÔµÄÌõ¼þ¡£Èç expectedWheels > 0, myCar != null¡£ºóÖÃÌõ¼þÓÃÓÚÔÚ²âÊÔÖ´ÐкóÅжϲâÊԵĽá¹ûÊÇ·ñÕýÈ·¡£Èç expectedWheels==myCar.getWheels()¡£¶ø²»±äʽÔÚÅжϽ»Ò×(Transaction)µÄÒ»ÖÂÐÔ£¨consistency£©·½ÃæÓÈΪÓÐÓá£ÎÒÏ£ÍûJUnit¿ÉÒÔ½«Design by Contract×÷ΪδÀ´°æ±¾µÄÒ»¸öÔöÇ¿¡£

Áù¡¢Refactoring£¨Õâ¾ä»°ÎÒÒÀȻû·¨·­Ò룩

Refactoring±¾À´Óë²âÊÔûÓÐÖ±½ÓµÄÁªÏµ£¬¶øÊÇÓëÈí¼þìØÓйأ¬µ«¼ÈÈ»ÎÒÃÇ˵²âÊÔÄܽâ¾öÈí¼þìØÎÊÌ⣬ÎÒÃÇÒ²¾Í±ØÐë˵³ö½â¾öÖ®µÀ¡££¨½ö½ö½øÐвâÊÔÖ»ÄÜ·¢ÏÖÈí¼þìØ£¬RefactoringÔò¿É½â¾öÈí¼þìØ´øÀ´µÄÎÊÌâ¡££©Èí¼þìØÒý³öÁËÒ»¸öÎÊÌ⣺ÊÇ·ñÐèÒªÖØÐÂÉè¼ÆÕû¸öÈí¼þµÄ½á¹¹£¿ÀíÂÛÉÏÓ¦¸ÃÈç´Ë£¬µ«ÏÖʵ²»ÔÊÐíÎÒÃÇÕâô×ö¡£Õâ»òÕßÊÇÓÉÓÚʱ¼äµÄÔ­Òò£¬»òÕßÊÇÓÉÓÚ·ÑÓõÄÔ­Òò¡£ÖØÐÂÉè¼ÆÕû¸öÈí¼þµÄ½á¹¹»á¸øÎÒÃÇ´øÀ´¶ÌÆÚµÄÍ´¿à¡£¶ø²»Í£µØ¸øÈí¼þ´ò²¹¶¡ÉõÖÁÊDz¹¶¡µÄ²¹¶¡Ôò»á¸øÎÒÃÇ´øÀ´³¤ÆÚµÄÍ´¿à¡££¨²»¹ÜÔõÑù£¬ÎÒÃÇ×Ü´¦ÓÚË®Éî»ðÈÈÖ®ÖУ©

RefactoringÊÇÒ»¸öÊõÓÓÃÓÚÃèÊöÒ»ÖÖ¼¼Êõ£¬ÀûÓÃÕâÖÖ¼¼ÊõÎÒÃÇ¿ÉÒÔÃâÓÚÖØ¹¹Õû¸öÈí¼þËù´øÀ´µÄ¶ÌÆÚÍ´¿à¡£µ±Äãrefactorʱ£¬Äã²¢²»¸Ä±ä³ÌÐòµÄ¹¦ÄÜ£¬¶øÊǸıä³ÌÐòÄÚ²¿µÄ½á¹¹£¬Ê¹Æä¸üÒ×Àí½âºÍʹÓá£È磺¸Ã±äÒ»¸ö·½·¨µÄÃû×Ö£¬½«Ò»¸ö³ÉÔ±±äÁ¿´ÓÒ»¸öÀàÒÆµ½ÁíÒ»¸öÀ࣬½«Á½¸öÀàËÆ·½·¨³éÏ󵽸¸ÀàÖС£Ëù×÷µÄÿһ¸ö²½¶¼ºÜС£¬È»¶ø1£­2¸öСʱµÄRefactoring¹¤×÷¿ÉÒÔʹÄãµÄ³ÌÐò½á¹¹¸üÊʺÏĿǰµÄÇé¿ö¡£RefactoringÓÐһЩ¹æÔò£º

1> ²»ÒªÔÚ¼ÓÈëй¦ÄܵÄͬʱrefactorÒÑÓеĴúÂë¡£ÔÚÕâÁ½Õß¼äÒªÓÐÒ»¸öÇåÎúµÄ½çÏÞ¡£ÈçÿÌìÔçÉÏ1-2¸öСʱµÄRefactoring£¬ÆäÓàʱ¼äÌí¼ÓÐµĹ¦ÄÜ£»

2> ÔÚÄ㿪ʼRefactoringǰ£¬ºÍRefactoringºó¶¼Òª±£Ö¤²âÊÔÄÜ˳Àûͨ¹ý£¬·ñÔòRefactoringûÓÐÈκÎÒâÒ壻

3> ½øÐÐСµÄRefactoring£¬´óµÄ¾Í²»ÊÇRefactoringÁË¡£Èç¹ûÄã´òËãÖØ¹¹Õû¸öÈí¼þ£¬¾ÍûÓбØÒªRefactoringÁË¡£Ö»ÓÐÔÚÌí¼Óй¦Äܺ͵÷ÊÔbugʱ²ÅÓÖ±ØÒªRefactoring¡£²»ÒªµÈµ½½»¸¶Èí¼þµÄ×îºó¹ØÍ·²ÅRefactoring¡£ÄÇÑùºÍ´ò²¹¶¡µÄÇø±ð²»´ó¡£Refactoring ÓÃÔڻعé²âÊÔÖÐÒ²ÄÜÏÔʾÆäÍþÁ¦¡£ÒªÃ÷°×£¬ÎÒ²»·´¶Ô´ò²¹¶¡£¬µ«Òª¼Çס´ò²¹¶¡ÊÇÓ¦¸Ã×îºóʹÓõıØÉ±¾øÕС££¨´ò²¹¶¡Ò²ÐèÒªºÜ¸ßµÄ¼¼Êõ£¬ÏêÇé²Î¿´Î¢ÈíÍøÕ¾£©

Æß¡¢IDE¶ÔJUnitµÄÖ§³Ö

Ŀǰ֧³ÖJUnitµÄJava IDE °üÀ¨

IDE
·½Ê½
·ÖÊý£¨1£­5£¬Âú·Ö5£©

Forte for Java 3.0 Enterprise Edition
plug-in
3

Jbuilder 9 Enterprise Edition
integrated with IDE
4

Visual Age for Java
support
N/A

ÔÚIDEÖÐÈçºÎʹÓÃJUnit,ÊǷdz£¾ßÌåµÄÊÂÇé¡£²»Í¬µÄIDEÓв»Í¬µÄʹÓ÷½·¨¡£Ò»µ©Àí½âÁËJUnitµÄ±¾ÖÊ£¬Ê¹ÓÃÆðÀ´¾ÍÊ®·ÖÈÝÒ×ÁË¡£ËùÒÔÎÒÃDz»ÒÀÀµÓÚ¾ßÌåµÄIDE£¬¶øÊǼ¯Öо«Á¦½²ÊöÈçºÎÀûÓÃJUnit±àдµ¥Ôª²âÊÔ´úÂë¡£Ðļ±µÄÈ˿ɲο´×ÊÁÏ¡£

°Ë¡¢Ð¡½á

ÄãÒ»µ©°²×°ÍêJUnit£¬¾ÍÓпÉÄÜÏëÊÔÊÔÎÒÃǵÄCarºÍtestCarÀ࣬ûÎÊÌ⣬ÎÒÒѾ­ÔËÐйýÁË,ÄãµÃµ½µÄ½á¹ûÓ¦¸ÃºÍÎÒÁгöµÄ½á¹ûÀàËÆ¡£½ÓÏÂÀ´£¬Äã¿ÉÄÜ»áÏÈд²âÊÔ´úÂ룬ÔÙд¹¤×÷´úÂ룬»òÕßÏà·´£¬ÏÈд¹¤×÷´úÂ룬ÔÙд²âÊÔ´úÂë¡£ÎÒ¸üÔÞ³ÉʹÓÃǰһÖÖ·½·¨£ºÏÈд²âÊÔ´úÂ룬ÔÙд¹¤×÷´úÂë¡£ÒòΪÕâÑù¿ÉÒÔʹÎÒÃDZàд¹¤×÷´úÂëʱÇåÎúµØÁ˽⹤×÷ÀàµÄÐÐΪ¡£

ҪעÒâ±àдһ¶¨ÄÜͨ¹ýµÄ²âÊÔ´úÂ루ÈçÎÄÖеÄÀý×Ó£©²¢Ã»ÓÐÈκÎÒâÒ壬ֻÓвâÊÔ´úÂëÄܰïÖúÎÒÃÇ·¢ÏÖbug£¬²âÊÔ´úÂë²ÅÓÐÆä¼ÛÖµ¡£´ËÍâ²âÊÔ´úÂ뻹Ӧ¸Ã¶Ô¹¤×÷´úÂë½øÐÐÈ«ÃæµÄ²âÊÔ¡£Èç¸ø·½·¨µ÷ÓõIJÎÊý´«Èë¿ÕÖµ¡¢´íÎóÖµºÍÕýÈ·µÄÖµ£¬¿´¿´·½·¨µÄÐÐΪÊÇ·ñÈçÄãËùÆÚÍûµÄÄÇÑù¡£

ÄãÏÖÔÚÒѾ­ÖªµÀÁ˱àд²âÊÔÀàµÄ»ù±¾²½Ö裺

1> À©Õ¹TestCaseÀࣻ

2> ¸²¸ÇrunTest()·½·¨£¨¿ÉÑ¡£©£»

3> дһЩtestXXXXX()·½·¨¡£

Fixture

½ÓÏÂÀ´µÄÎÊÌâÊÇ£¬Èç¹ûÄãÒª¶ÔÒ»¸ö»òÈô¸É¸öµÄÀàÖ´Ðжà¸ö²âÊÔ£¬¸ÃÔõô°ì£¿JUnit¶Ô´ËÓÐÌØÊâµÄ½â¾ö°ì·¨¡£Èç¹ûÐèÒªÔÚÒ»¸ö»òÈô¸É¸öµÄÀàÖ´Ðжà¸ö²âÊÔ£¬ÕâЩÀà¾Í³ÉΪÁ˲âÊÔµÄcontext¡£ÔÚJUnitÖб»³ÆÎªFixture£¨ÈçtestCarÀàÖÐµÄ myCar ºÍ expectedWheels £©¡£µ±Äã±àд²âÊÔ´úÂëʱ£¬Äã»á·¢ÏÖÄ㻨·ÑÁ˺ܶàʱ¼äÅäÖÃ/³õʼ»¯Ïà¹Ø²âÊÔµÄFixture¡£½«ÅäÖÃFixtureµÄ´úÂë·ÅÈë²âÊÔÀàµÄ¹¹Ôì·½·¨Öв¢²»¿ÉÈ¡£¬ÒòΪÎÒÃÇÒªÇóÖ´Ðжà¸ö²âÊÔ£¬ÎÒ²¢²»Ï£Íûij¸ö²âÊԵĽá¹ûÒâÍâµØ£¨Èç¹ûÕâÊÇÄãÒªÇóµÄ£¬ÄǾÍÁíµ±±ðÂÛÁË£©Ó°ÏìÆäËû²âÊԵĽá¹û¡£Í¨³£Èô¸É¸ö²âÊÔ»áʹÓÃÏàͬµÄFixture£¬¶øÃ¿¸ö²âÊÔÓÖ¸÷ÓÐ×Ô¼ºÐèÒª¸Ä±äµÄµØ·½¡£Îª´Ë£¬JUnitÌṩÁËÁ½¸ö·½·¨£¬¶¨ÒåÔÚTestCaseÀàÖС£

protected void setUp() throws java.lang.Exception

protected void tearDown() throws java.lang.Exception

¸²¸ÇsetUp()·½·¨£¬³õʼ»¯ËùÓвâÊÔµÄFixture£¨ÄãÉõÖÁ¿ÉÒÔÔÚsetUpÖн¨Á¢ÍøÂçÁ¬½Ó£©£¬½«Ã¿¸ö²âÊÔÂÔÓв»Í¬µÄµØ·½ÔÚtestXXX()·½·¨ÖнøÐÐÅäÖ᣸²¸ÇtearDown()£¨ÎÒ×ÜÏëÆðÒ»Ê×½ÐÓêµÎµÄ¼ªËûÇú£©£¬ÊÍ·ÅÄãÔÚsetUp()ÖзÖÅäµÄÓÀ¾ÃÐÔ×ÊÔ´£¬ÈçÊý¾Ý¿âÁ¬½Ó¡£µ±JUnitÖ´ÐвâÊÔʱ£¬ËüÔÚÖ´ÐÐÿ¸ötestXXXXX()·½·¨Ç°¶¼µ÷ÓÃsetUp()£¬¶øÔÚÖ´ÐÐÿ¸ötestXXXXX()·½·¨ºó¶¼µ÷ÓÃtearDown()·½·¨£¬Óɴ˱£Ö¤Á˲âÊÔ²»»áÏ໥ӰÏì¡£

TestCase

ÐèÒªÌáÐÑһϣ¬ÔÚjunit.framework.AssertÀàÖж¨ÒåÁËÏ൱¶àµÄassert·½·¨£¬Ö÷ÒªÓÐassert(),assertEquals(), assertNull(), assertSame(), assertTrue(), fail()µÈ·½·¨¡£Èç¹ûÄãÐèÒª±È½Ï×Ô¼º¶¨ÒåµÄÀ࣬ÈçCar¡£assert·½·¨ÐèÒªÄ㸲¸ÇObjectÀàµÄequals()·½·¨£¬ÒԱȽÏÁ½¸ö¶ÔÏóµÄ²»Í¬¡£Êµ¼ù±íÃ÷:Èç¹ûÄ㸲¸ÇÁËObjectÀàµÄequals()·½·¨£¬×îºÃÒ²¸²¸ÇObjectÀàµÄhashCode()·½·¨¡£ÔÙ½øÒ»²½£¬Á¬´øObjectÀàµÄtoString()·½·¨Ò²Ò»²¢¸²¸Ç¡£ÕâÑù¿ÉÒÔʹ²âÊÔ½á¹û¸ü¾ß¿É¶ÁÐÔ¡£

µ±ÄãÉèÖúÃÁËFixtureºó£¬ÏÂÒ»²½ÊDZàдËùÐèµÄtestXXX()·½·¨¡£Ò»¶¨Òª±£Ö¤testXXX()·½·¨µÄpublicÊôÐÔ£¬·ñÔòÎÞ·¨Í¨¹ýÄÚÊ¡£¨reflection£©¶Ô¸Ã²âÊÔ½øÐе÷Óá£Ã¿¸öÀ©Õ¹µÄTestCaseÀࣨҲ¾ÍÊÇÄã±àдµÄ²âÊÔÀࣩ»áÓжà¸ötestXXX()·½·¨¡£Ò»¸ötestXXX()·½·¨¾ÍÊÇÒ»¸ö²âÊÔ¡£ÒªÏëÔËÐÐÕâ¸ö²âÊÔ£¬Äã±ØÐ붨ÒåÈçºÎÔËÐиòâÊÔ¡£Èç¹ûÄãÓжà¸ötestXXX()·½·¨£¬Äã¾ÍÒª¶¨Òå¶à´Î¡£JUnitÖ§³ÖÁ½ÖÖÔËÐе¥¸ö²âÊԵķ½·¨£º¾²Ì¬µÄºÍ¶¯Ì¬µÄ·½·¨¡£

¾²Ì¬µÄ·½·¨¾ÍÊǸ²¸ÇTestCaseÀàµÄrunTest()·½·¨£¬Ò»°ãÊDzÉÓÃÄÚ²¿ÀàµÄ·½Ê½´´½¨Ò»¸ö²âÊÔʵÀý£º

TestCase test01 = new testCar("test getWheels")

{

public void runTest()

{

testGetWheels();

}

}

²ÉÓþ²Ì¬µÄ·½·¨Òª×¢ÒâÒª¸øÃ¿¸ö²âÊÔÒ»¸öÃû×Ö£¨Õâ¸öÃû×Ö¿ÉÒÔÈÎÒâÆð£¬µ«Äã¿Ï¶¨Ï£ÍûÕâ¸öÃû×ÖÓÐijÖÖÒâÒ壩£¬ÕâÑùÄã¾Í¿ÉÒÔÇø·ÖÄǸö²âÊÔʧ°ÜÁË¡£

¶¯Ì¬µÄ·½·¨ÊÇÓÃÄÚÊ¡£¨Introspection£¬¼ì²é±ê×¼¹ÜÀí¹¹¼þ½Ó¿ÚºÍÓ¦ÓÃÉè¼ÆÄ£Ê½µÄ¹ý³Ì£©À´ÊµÏÖrunTest()ÒÔ´´½¨Ò»¸ö²âÊÔʵÀý¡£ÕâÒªÇó²âÊÔµÄÃû×Ö¾ÍÊÇÐèÒªµ÷ÓõIJâÊÔ·½·¨µÄÃû×Ö£º

TestCase test01 = new testCar("testGetWheels");

JUnit»á¶¯Ì¬²éÕÒ²¢µ÷ÓÃÖ¸¶¨µÄ²âÊÔ·½·¨¡£¶¯Ì¬µÄ·½·¨ºÜ¼ò½à£¬µ«Èç¹ûÄã¼üÈëÁË´íÎóµÄÃû×־ͻáµÃµ½Ò»¸öÁîÈËÆæ¹ÖµÄNoSuchMethodExceptionÒì³£¡£¶¯Ì¬µÄ·½·¨ºÍ¾²Ì¬µÄ·½·¨¶¼ºÜºÃ£¬Äã¿ÉÒÔ°´ÕÕ×Ô¼ºµÄϲºÃÀ´Ñ¡Ôñ¡££¨Ïȱð׿±Ñ¡Ôñ£¬ºóÃæ»¹ÓÐÒ»ÖÖ¸ü¿áµÄ·½·¨µÈ×ÅÄãÄØ¡££©

TestSuite

Ò»µ©Äã´´½¨ÁËһЩ²âÊÔʵÀý£¬ÏÂÒ»²½¾ÍÊÇÒªÈÃËûÃÇÄÜÒ»ÆðÔËÐС£ÎÒÃDZØÐ붨ÒåÒ»¸öTestSuite¡£ÔÚJUnitÖУ¬Õâ¾ÍÒªÇóÄãÔÚTestCaseÀàÖж¨ÒåÒ»¸ö¾²Ì¬µÄsuite()·½·¨¡£suite()·½·¨¾ÍÏñmain()·½·¨Ò»Ñù£¬JUnitÓÃËüÀ´Ö´ÐвâÊÔ¡£ÔÚsuite()·½·¨ÖУ¬Ä㽫²âÊÔʵÀý¼Óµ½Ò»¸öTestSuite¶ÔÏóÖУ¬²¢·µ»ØÕâ¸öTestSuite¶ÔÏó¡£Ò»¸öTestSuite¶ÔÏó¿ÉÒÔÔËÐÐÒ»×é²âÊÔ¡£TestSuiteºÍTestCase¶¼ÊµÏÖÁËTest½Ó¿Ú£¨interface£©£¬¶øTest½Ó¿Ú¶¨ÒåÁËÔËÐвâÊÔËùÐèµÄ·½·¨¡£Õâ¾ÍÔÊÐíÄãÓÃTestCaseºÍTestSuiteµÄ×éºÏ´´½¨Ò»¸öTestSuite¡£Õâ¾ÍÊÇΪʲôÎÒÃÇÇ°ÃæËµTestCase£¬TestSuiteÒÔ¼°TestSuite×é³ÉÁËÒ»¸öcomposite PatternµÄÔ­Òò¡£Àý×ÓÈçÏ£º

public static Test suite()

{

TestSuite suite= new TestSuite();

suite.addTest(new testCar("testGetWheels"));

suite.addTest(new testCar("testGetSeats"));

return suite;

}

´ÓJUnit 2.0¿ªÊ¼£¬ÓÐÒ»ÖÖ¸ü¼òµ¥µÄ¶¯Ì¬¶¨Òå²âÊÔʵÀýµÄ·½·¨¡£ÄãÖ»Ð轫Àà´«µÝ¸øTestSuite£¬JUnit»á¸ù¾Ý²âÊÔ·½·¨Ãû×Ô¶¯´´½¨ÏàÓ¦µÄ²âÊÔʵÀý¡£ËùÒÔÄãµÄ²âÊÔ·½·¨×îºÃÈ¡ÃûΪtestXXX()¡£Àý×ÓÈçÏ£º

public static Test suite()

{

return new TestSuite(testCar.class);

}

´ÓJUnitµÄÉè¼ÆÎÒÃǿɿ´³ö£¬JUnit²»½ö¿ÉÓÃÓÚµ¥Ôª²âÊÔ£¬Ò²¿ÉÓÃÓÚ¼¯³É²âÊÔ¡£¹ØÓÚÈçºÎÓÃJUnit½øÐм¯³É²âÊÔÇë²Î¿¼Ïà¹Ø×ÊÁÏ¡£

ΪÁ˼æÈÝÐԵĿ¼ÂÇ£¬ÏÂÃæÁгöʹÓþ²Ì¬·½·¨µÄÀý×Ó£º

public static Test suite()

{

TestSuite suite= new TestSuite();

suite.addTest(

new testCar("Car.getWheels")

{

protected void runTest()

{

testGetWheels();

}

}

);

return suite;

}

TestRunner

ÓÐÁËTestSuiteÎÒÃǾͿÉÒÔÔËÐÐÕâЩ²âÊÔÁË£¬JUnitÌṩÁËÈýÖÖ½çÃæÀ´ÔËÐвâÊÔ

[Text UI] junit.textui.TestRunner

[AWT UI] junit.awtui.TestRunner

[Swing UI] junit.swingui.TestRunner

ÎÒÃÇÇ°ÃæÒѾ­¿´¹ýÎı¾½çÃæÁË£¬ÏÂÃæÈÃÎÒÃÇÀ´¿´Ò»¿´Í¼ÐνçÃæ£º

½çÃæºÜ¼òµ¥£¬¼üÈëÀàÃû£­testCar¡£»òÔÚÆô¶¯UIµÄʱºò¼üÈëÀàÃû£º

[Windows] D:\>java junit.swingui.TestRunner testCar

[Unix] £¥ java junit.swingui.TestRunner testCar

´ÓͼÐÎUI¿ÉÒÔ¸üºÃµÄÔËÐвâÊԿɲ鵥²âÊÔ½á¹û¡£»¹ÓÐÒ»¸öÎÊÌâÐèҪעÒ⣺Èç¹ûJUnit±¨¸æÁ˲âÊÔûÓгɹ¦£¬JUnit»áÇø·Öʧ°Ü£¨failures£©ºÍ´íÎó£¨errors£©¡£Ê§°ÜÊÇÒ»¸öÆÚÍûµÄ±»assert·½·¨¼ì²éµ½µÄ½á¹û¡£¶ø´íÎóÔòÊÇÒâÍâµÄÎÊÌâÒýÆðµÄ£¬ÈçArrayIndexOutOfBoundsException¡£

ÓÉÓÚTestRunnerÊ®·Ö¼òµ¥£¬½çÃæÒ²±È½ÏÖ±¹Û£¬¹Ê²»¶à½éÉÜ¡£ÅóÓÑÃÇ¿É×ÔÐвο¼Ïà¹Ø×ÊÁÏ¡£

JUnit×î¼Ñʵ¼ù

Martin Fowler£¨ÓÖÊÇÕâλ¸ßÈË£©Ëµ¹ý£º“µ±ÄãÊÔͼ´òÓ¡Êä³öһЩÐÅÏ¢»òµ÷ÊÔÒ»¸ö±í´ïʽʱ£¬Ð´Ò»Ð©²âÊÔ´úÂëÀ´Ìæ´úÄÇЩ´«Í³µÄ·½·¨¡£”Ò»¿ªÊ¼£¬Äã»á·¢ÏÖÄã×ÜÊÇÒª´´½¨Ò»Ð©ÐµÄFixture£¬¶øÇÒ²âÊÔËÆºõʹÄãµÄ±à³ÌËÙ¶ÈÂýÁËÏÂÀ´¡£È»¶ø²»¾ÃÖ®ºó£¬Äã»á·¢ÏÖÄãÖØ¸´Ê¹ÓÃÏàͬµÄFixture£¬¶øÇÒеIJâÊÔͨ³£Ö»Éæ¼°Ìí¼ÓÒ»¸öеIJâÊÔ·½·¨¡£

Äã¿ÉÄÜ»áдÐí¶à²âÊÔ´úÂ룬µ«ÄãºÜ¿ì¾Í»á·¢ÏÖÄãÉèÏë³öµÄ²âÊÔÖ»ÓÐһС²¿·ÖÊÇÕæÕýÓÐÓõġ£ÄãËùÐèÒªµÄ²âÊÔÊÇÄÇЩ»áʧ°ÜµÄ²âÊÔ£¬¼´ÄÇЩÄãÈÏΪ²»»áʧ°ÜµÄ²âÊÔ£¬»òÄãÈÏΪӦ¸Ãʧ°ÜÈ´³É¹¦µÄ²âÊÔ¡£

ÎÒÃÇÇ°ÃæÌáµ½¹ý²âÊÔÊÇÒ»¸ö²»»áÖжϵĹý³Ì¡£Ò»µ©ÄãÓÐÁËÒ»¸ö²âÊÔ£¬Äã¾ÍҪһֱȷ±£ÆäÕý³£¹¤×÷£¬ÒÔ¼ìÑéÄãËù¼ÓÈëµÄÐµĹ¤×÷´úÂë¡£²»ÒªÃ¿¸ô¼¸Ìì»ò×îºó²ÅÔËÐвâÊÔ£¬Ã¿ÌìÄã¶¼Ó¦¸ÃÔËÐÐһϲâÊÔ´úÂë¡£ÕâÖÖͶ×ʺÜС£¬µ«¿ÉÒÔÈ·±£ÄãµÃµ½¿ÉÒÔÐÅÀµµÄ¹¤×÷´úÂë¡£ÄãµÄ·µ¹¤ÂʽµµÍÁË£¬Äã»áÓиü¶àµÄʱ¼ä±àд¹¤×÷´úÂë¡£

²»ÒªÈÏΪѹÁ¦´ó£¬¾Í²»Ð´²âÊÔ´úÂë¡£Ïà·´±àд²âÊÔ´úÂë»áʹÄãµÄѹÁ¦Öð½¥¼õÇᣬӦΪͨ¹ý±àд²âÊÔ´úÂ룬Äã¶ÔÀàµÄÐÐΪÓÐÁËÈ·ÇеÄÈÏʶ¡£Äã»á¸ü¿ìµØ±àд³öÓÐЧÂʵع¤×÷´úÂë¡£ÏÂÃæÊÇһЩ¾ßÌåµÄ±àд²âÊÔ´úÂëµÄ¼¼ÇÉ»ò½ÏºÃµÄʵ¼ù·½·¨£º

1. ²»ÒªÓÃTestCaseµÄ¹¹Ô캯Êý³õʼ»¯Fixture£¬¶øÒªÓÃsetUp()ºÍtearDown()·½·¨£»

2. ²»ÒªÒÀÀµ»ò¼Ù¶¨²âÊÔÔËÐеÄ˳Ðò£¬ÒòΪJUnitÀûÓÃVector±£´æ²âÊÔ·½·¨¡£ËùÒÔ²»Í¬µÄƽ̨»á°´²»Í¬µÄ˳Ðò´ÓVectorÖÐÈ¡³ö²âÊÔ·½·¨£»

3. ±ÜÃâ±àдÓи±×÷ÓõÄTestCase¡£ÀýÈ磺Èç¹ûËæºóµÄ²âÊÔÒÀÀµÓÚÄ³Ð©ÌØ¶¨µÄ½»Ò×Êý¾Ý£¬¾Í²»ÒªÌá½»½»Ò×Êý¾Ý¡£¼òµ¥µÄ»Ø¹ö¾Í¿ÉÒÔÁË£»

4. µ±¼Ì³ÐÒ»¸ö²âÊÔÀàʱ£¬¼ÇµÃµ÷Óø¸ÀàµÄsetUp()ºÍtearDown()·½·¨£»

5. ½«²âÊÔ´úÂëºÍ¹¤×÷´úÂë·ÅÔÚÒ»Æð£¬Ò»±ßͬ²½±àÒëºÍ¸üУ¨Ê¹ÓÃAntÖÐÓÐÖ§³ÖjunitµÄtask£©£»

6. ²âÊÔÀàºÍ²âÊÔ·½·¨Ó¦¸ÃÓÐÒ»ÖµÄÃüÃû·½°¸¡£ÈçÔÚ¹¤×÷ÀàÃûǰ¼ÓÉÏtest´Ó¶øÐγɲâÊÔÀàÃû£»

7. È·±£²âÊÔÓëʱ¼äÎ޹أ¬²»ÒªÒÀÀµÊ¹ÓùýÆÚµÄÊý¾Ý½øÐвâÊÔ¡£µ¼ÖÂÔÚËæºóµÄά»¤¹ý³ÌÖкÜÄÑÖØÏÖ²âÊÔ£»

8. Èç¹ûÄã±àдµÄÈí¼þÃæÏò¹ú¼ÊÊг¡£¬±àд²âÊÔʱҪ¿¼Âǹú¼Ê»¯µÄÒòËØ¡£²»Òª½öÓÃĸÓïµÄLocale½øÐвâÊÔ£»

9. ¾¡¿ÉÄܵØÀûÓÃJUnitÌṩµØassert/fail·½·¨ÒÔ¼°Òì³£´¦ÀíµÄ·½·¨£¬¿ÉÒÔʹ´úÂë¸üΪ¼ò½à£»

10.²âÊÔÒª¾¡¿ÉÄܵØÐ¡£¬Ö´ÐÐËٶȿ졣

ÊÂʵÉÏ£¬JUnit»¹¿ÉÓÃÓÚ¼¯³É²âÊÔ£¬µ«ÎÒ²¢Ã»Éæ¼°µ½£¬Ô­ÒòÓÐÁ½¸ö£ºÒ»ÊÇÒòΪûÓе¥Ôª²âÊÔ£¬¼¯³É²âÊÔÎÞ´Ó̸Æð¡£ÎÒÃǽÓÊܲâÊԵظÅÄîÒѾ­ºÜ²»ÈÝÒ×ÁË£¬Èç¹ûÔÙÒýÈ뼯³É²âÊԾͻá¸üÀ§ÄÑ¡£¶þÊÇÎұȽÏÀÁ£¬Ï£Íû½«¼¯³É²âÊÔµÄÈÎÎñ½»¸ø²âÊÔÈËԱȥ×ö¡£ÔÚJUnitµÄÍøÕ¾ÉÏÓÐһЩÏà¹ØµÄÎÄÕ£¬Óпմó¼Ò¿ÉÒÔ·­Ò»·­¡£

JUnitÓëJ2EE

Èç¹û´ó¼Ò×Ðϸ¿¼ÂÇÒ»ÏµĻ°£¬¾Í»á·¢ÏÖ£¬JUnitÓÐ×Ô¼ºµÄ¾ÖÏÞÐÔ£¬±ÈÈç¶ÔͼÐνçÃæµÄ²âÊÔ£¬¶Ôservlet/JSPÒÔ¼°EJBµÄ²âÊÔÎÒÃǶ¼Ã»ÓоÙÏà¹ØµÄÀý×Ó¡£Êµ¼ÊÉÏ£¬JUnit¶ÔÓÚGUI½çÃæ£¬servlet/JSP£¬JavaBeanÒÔ¼°EJB¶¼Óа취²âÊÔ¡£¹ØÓÚGUIµÄ²âÊԱȽϸ´ÔÓ£¬ÊʺÏÓÃÒ»ÕûƪÎÄÕÂÀ´½éÉÜ¡£ÕâÀï¾Í²»¶à˵ÁË¡£

Ç°ÃæÎÒÃÇËù×öµÄ²âÊÔʵ¼ÊÉÏÓÐÒ»¸öÒþº¬µÄ»·¾³£¬JVMÎÒÃǵÄÀàÐèÒªÕâ¸öJVMÀ´Ö´ÐС£¶øÔÚJ2EE¿ò¼ÜÖУ¬servlet/JSP£¬EJB¶¼ÒªÇóÓÐ×Ô¼ºµÄÔËÐл·¾³£ºWeb ContainerºÍEJB Container¡£ËùÒÔ£¬ÒªÏë¶Ôservlet/JSP£¬EJB½øÐвâÊÔ¾ÍÐèÒª½«Æä²¿ÊðÔÚÏàÓ¦µÄContainerÖвÅÄܽøÐвâÊÔ¡£ÓÉÓÚEJB²»Éæ¼°UIµÄÎÊÌ⣨³ý·ÇEJB²Ù×÷XMLÊý¾Ý£¬´ËʱµÄ²âÊÔ´úÂë±È½ÏÄÑд£¬ÓпÉÄÜÐèÒªÄã±È½ÏÁ½¿ÃDOMÊ÷ÊÇ·ñº¬ÓÐÏàͬµÄÄÚÈÝ£©Ö»Òª²¿ÊðÉÏÈ¥Ö®ºó¾Í¿ÉÒÔÔËÐвâÊÔ´úÂëÁË¡£´ËʱsetUp()·½·¨ÏÔµÃÌØ±ðÓÐÓã¬Äã¿ÉÒÔÔÚsetUp()·½·¨ÖÐÀûÓÃJNDI²éÕÒÌØ¶¨µÄEJB¡£¶øÔÚtestXXX()·½·¨Öе÷Óò¢²âÊÔÕâЩEJBµÄ·½·¨¡£

ÕâÀïËùÖ¸µÄJavaBeanͬÑùûÓÐUIµÄÎÊÌ⣬±ÈÈ磬ÎÒÃÇÓÃJavaBeanÀ´·ÃÎÊÊý¾Ý¿â£¬»òÓÃJavaBeanÀ´°ü¹üEJB¡£Èç¹ûÕâÀàJavaBeanûÓÐÓõ½ContainerµÄÌṩµÄ·þÎñ£¬Ôò¿ÉÖ±½Ó½øÐвâÊÔ£¬Í¬ÎÒÃÇÇ°ÃæËù˵µÄÒ»°ãµÄÀàµÄ²âÊÔ·½·¨Ò»Ñù¡£Èç¹ûÕâÀàJavaBeanÓõ½ÁËContainerµÄÌṩµÄ·þÎñ£¬ÔòÐèÒª½«Æä²¿ÊðÔÚContainerÖвÅÄܽøÐвâÊÔ¡£·½·¨ÓëEJBÀàËÆ¡£¶ÔÓÚservlet/JSPµÄ²âÊÔÔò±È½Ï¼¬ÊÖ£¬ÓÐÈ˽¨ÒéÔÚ²âÊÔ´úÂëÖй¹ÔìHttpRequestºÍHttpResponse£¬È»ºó½øÐбȽϣ¬Õâ¾ÍÒªÇ󿪷¢ÈËÔ±¶ÔHTTPЭÒéÒÔ¼°servlet/JSPµÄÄÚ²¿ÊµÏÖÓбȽÏÉîµÄÈÏʶ¡£ÎÒÈÏΪÕâÕв»Ì«ÏÖʵ¡£Ò²ÓÐÈËÌá³öʹÓÃHttpUnit¡£ÓÉÓÚÎÒ¶ÔCactusºÍHttpUnitÁ˽ⲻ¶à£¬ËùÒÔÎÞ·¨×ö³öºÏÊʵĽ¨Ò顣ϣÍû¸÷λÏÈÖªÃÇÄܲ»Áߴͽ̡£

ÕýÊÇÓÉÓÚJUnitµÄ¿ª·ÅÐԺͼòµ¥Ò×ÐУ¬²Å»áÒý³öÕâÆª½éÉÜÎÄÕ¡£µ«¼¼Êõ×ÜÔÚ²»¶ÏµØ¸üУ¬¶øÇÒÎÒ¶Ô²âÊÔ²¢Ã»Óзdz£ÉîÈëµÄÀí½â£»ÎÒ¿ÉÒÔ½«Ò»¸ö¸´ÔӵĸÅÄî¼ò»¯³ÉÒ»¾ä·Ç³£ÈÝÒ×Àí½âµÄ»°¡£µ«Îҵı¾ÒâÖ»ÊÇÏ£ÍûÄܽµµÍ¿ª·¢ÈËÔ±²½Èë²âÊÔÁìÓòµÄÃż÷£¬¶ø²»ÊÇÒªÐ޸ĻòÖØÐ¶¨ÒåһЩ¸ÅÄî¡£ÕâÒ»µãÊÇÌØ±ðҪǿµ÷µÄ¡£×îºó£¬Èç¹ûÓÐЩÐֵܽãÃÃÄܸøÎÒÖ¸³öһЩעÒâÊÂÏî»òÎÒ¶ÔijЩÎÊÌâµÄÀí½âÓÐÎó£¬ÎÒ»á·Ç³£¸Ð¼¤µÄ¡£

±¾U R L:http://www.qqread.com/java/2006/05/w002109002.html½øÈëÌÖÂÛ×éÌÖÂÛ¡£
¡¾ÊղشËÎÄ¡¿¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿¡¾¹Ø±Õ¡¿
Ïà¹ØÍ¼ÎÄÔĶÁ
ƵµÀͼÎÄÍÆ¼ö
½¡ ¿µ ×É Ñ¯
ʱ ÉÐ ×É Ñ¯
ÇÉÇɶÁÊé×ÚÖ¼
Ïà¹Ø×¨Ìâ
ÌÖÂÛ×éÎÊÌâÍÆ¼ö
Õ¾ÄÚ¸÷ƵµÀ×îиüÐÂÎĵµ
Õ¾ÄÚ×îÐÂÖÆ×÷רÌâ
ÈÈÃŹؼü×Öµ¼¶Á
Photoshop½Ì ³Ì£ºÕÕÆ¬´¦Àí ÕÕÆ¬ÖÆ×÷ PS¿ì½Ý¼ü ¿Ùͼ
¼Æ Ëã »ú ¹Ê ÕÏ£ºXPϵͳÐÞ¸´
ÒÕ Êõ Óë Éè ¼Æ£ºÉè¼Æ Á÷ýÌå Éè¼ÆÐÀÉÍ ±ß¿ò
¼Æ Ëã »ú °² È«£ºARP
Õ¾ÄÚÆµµÀÎÄÕ¾«Ñ¡
ÇÉÇɵçÄÔÆµµÀ±à¼­ÐÅÏä  ¸æËßÎÒÃÇÄúÏë¿´µÄרÌâ»òÎÄÕÂ