ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>精品国产一区久久,欧美一级日本a级v片,一级视频在线免费观看http://www.aygfsteel.com/liaojiyong/category/19328.htmlzh-cnThu, 19 Nov 2009 14:24:08 GMTThu, 19 Nov 2009 14:24:08 GMT60loadrunner 9.5 ç ´è§£ 注册ç ?/title><link>http://www.aygfsteel.com/liaojiyong/archive/2009/11/17/302626.html</link><dc:creator>liaojiyong</dc:creator><author>liaojiyong</author><pubDate>Tue, 17 Nov 2009 01:01:00 GMT</pubDate><guid>http://www.aygfsteel.com/liaojiyong/archive/2009/11/17/302626.html</guid><wfw:comment>http://www.aygfsteel.com/liaojiyong/comments/302626.html</wfw:comment><comments>http://www.aygfsteel.com/liaojiyong/archive/2009/11/17/302626.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/liaojiyong/comments/commentRss/302626.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/liaojiyong/services/trackbacks/302626.html</trackback:ping><description><![CDATA[golba-1000åQšAEACFSJI-YASEKJJKEAHJD-BCLBR <img src ="http://www.aygfsteel.com/liaojiyong/aggbug/302626.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/liaojiyong/" target="_blank">liaojiyong</a> 2009-11-17 09:01 <a href="http://www.aygfsteel.com/liaojiyong/archive/2009/11/17/302626.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>åŽäØ“‹¹‹è¯•‹¹ç¨‹åQˆè{åQ?/title><link>http://www.aygfsteel.com/liaojiyong/archive/2007/05/28/120496.html</link><dc:creator>liaojiyong</dc:creator><author>liaojiyong</author><pubDate>Mon, 28 May 2007 08:02:00 GMT</pubDate><guid>http://www.aygfsteel.com/liaojiyong/archive/2007/05/28/120496.html</guid><wfw:comment>http://www.aygfsteel.com/liaojiyong/comments/120496.html</wfw:comment><comments>http://www.aygfsteel.com/liaojiyong/archive/2007/05/28/120496.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/liaojiyong/comments/commentRss/120496.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/liaojiyong/services/trackbacks/120496.html</trackback:ping><description><![CDATA[<p>不知不觉做华为外包项目已一òq´å¤šäº†ï¼Œæ›‘Öœ¨åŽäؓ帔R©»˜q‡ï¼Œä¹Ÿæ›¾è´Ÿè´£˜q‡é¡¹ç›®çš„‹¹‹è¯•åQŒæ„Ÿè§‰å¯¹åŽäؓ外包™å¹ç›®çš„æµ‹è¯•流½E‹è¾ƒç†Ÿæ‚‰åQŒæ•…写些心得来与大家分äínã€?/p> <p>      如果竞标成功åQŒé¡¹ç›®å°±å¼€å§‹è¦å¯åŠ¨äº†ã€?/p> <p>      åŽäØ“æ–¹ä¼šæä¾›ä¸€ä»½CRS(客户需æ±?å’ŒSOWåQˆå·¥ä½œä“Q务书åQ‰ï¼ŒåŽäØ“æ–ÒŽ´¾äºø™¿‡æ¥è¿›è¡Œéœ€æ±‚培训,˜q™æ—¶è¯¥é¡¹ç›®çš„‹¹‹è¯•¾l„长也要参与到项目需求的培训和评审,也就是测试工作应该从需求开始介入ã€?/p> <p>      ™å¹ç›®¾lç†¾~–写《项目计划》,开发äh员äñ”出《SRS》,˜q™æ—¶‹¹‹è¯•¾l„é•¿ž®Þp¦æ ÒŽ®SOW开始编写《测试计划》,其中包括人员åQŒèÊY件硬件资源,‹¹‹è¯•点,集成™åºåºåQŒè¿›åº¦å®‰æŽ’和风险识别½{‰å†…宏V€?/p> <p>     《测试计划》编写完成后需要进行评审,参与人员有项目经理,‹¹‹è¯•¾lç†å’ŒåŽä¸ºæ–¹äººå‘˜åQŒæµ‹è¯•组镉Kœ€è¦æ ¹æ®è¯„审意见修攏V€Šæµ‹è¯•计划》,òq¶ä¸Šä¼ åˆ°VSS上,由配¾|®ç®¡ç†å‘˜½Ž¡ç†ã€?/p> <p>      待开发äh员把《SRS》归¾U›_¥½òq¶æ‰“了基¾U¿ï¼Œ‹¹‹è¯•¾l„长开始组¾l‡æµ‹è¯•成员编写《测试方案》,‹¹‹è¯•æ–ÒŽ¡ˆè¦æ±‚æ ÒŽ®ã€ŠSRS》上的每个需求点设计出包括需求点½Ž€ä»‹ï¼Œ‹¹‹è¯•思èµ\和详¾l†æµ‹è¯•方法三部分的方案。《测试方案》编写完成后也需要进行评审,评审人员包括™å¹ç›®¾lç†åQŒå¼€å‘äh员,‹¹‹è¯•¾lç†åQŒæµ‹è¯•组长,‹¹‹è¯•成员和华为方åQ›å¦‚果华为方不在公司åQŒå°±éœ€è¦æµ‹è¯•ç»„é•¿æŠŠã€Šæµ‹è¯•æ–¹æ¡ˆã€‹å‘é€ç»™åŽäØ“˜q›è¡Œè¯„审åQŒåƈ˜q”回评审¾l“果。测试组长组¾l‡æµ‹è¯•成员修æ”ÒŽµ‹è¯•æ–¹æ¡ˆï¼Œç›´åˆ°åŽäØ“æ–¹è¯„å®¡é€šè¿‡åŽæ‰˜q›å…¥ä¸‹ä¸ªé˜¶æ®µâ€•―编写测试用例ã€?/p> <p>      ‹¹‹è¯•用例是根据《测试方案》来¾~–写的,通过《测试方案》阶ŒDµï¼Œ‹¹‹è¯•人员å¯ÒŽ•´ä¸ªç³»¾lŸéœ€æ±‚有了详¾l†çš„理解。这时开始编写用例才能保证用例的可执行和寚wœ€æ±‚的覆盖。测试用例需要包括测试项åQŒç”¨ä¾‹çñ”别,预置条äšgåQŒæ“ä½œæ­¥éª¤å’Œé¢„期¾l“果。其中操作步骤和预期¾l“果需要编写详¾l†å’Œæ˜Žç¡®ã€‚测试用例应该覆盖测试方案,而测试方案又覆盖了测试需求点åQŒè¿™æ äh‰èƒ½ä¿è¯å®¢æˆ·éœ€æ±‚ä¸é—æ¼ã€‚åŒæ øP¼Œ‹¹‹è¯•用例也需要通过开发äh员,‹¹‹è¯•人员和华为方的评审,‹¹‹è¯•¾l„长也需要组¾l‡æµ‹è¯•äh员对‹¹‹è¯•用例˜q›è¡Œä¿®æ”¹åQŒç›´åˆ°åŽä¸ºæ–¹è¯„审通过ã€?/p> <p>  在我们编写测试用例的阶段åQŒå¼€å‘äh员基本完成代码的¾~–写åQŒåŒæ—¶å®Œæˆå•元测试。华为的外包™å¹ç›®ä¸€èˆ¬æ˜¯ä¸€‹Æ¡æ€§é›†æˆï¼Œæ‰€ä»¥èÊYä»¶è{‹¹‹è¯•部后直接˜q›è¡Œ¾pȝ»Ÿ‹¹‹è¯•。测试部对刚转过来的‹¹‹è¯•版本˜q›è¡Œé¢„测试,如果软äšg未实现CheckList清单上的10åQ…,‹¹‹è¯•部会把该版本打回。否则,软äšg转测试部˜q›è¡Œ¾pȝ»Ÿ‹¹‹è¯•。根据《测试计划》进度安排,‹¹‹è¯•¾l„é•¿˜q›è¡Œå¤šè½®‹Æ¡çš„‹¹‹è¯•åQŒæ¯è½®æµ‹è¯•完成后‹¹‹è¯•¾l„长需要编写测试报告,其中包括用例执行通过情况åQŒç¼ºé™·åˆ†å¸ƒæƒ…况,¾~ºé™·äº§ç”ŸåŽŸå› åQŒæµ‹è¯•中的风险等½{‰ï¼Œ˜q™æ—¶‹¹‹è¯•人员ž®×ƒ¿®æ”¹å¢žåŠ æµ‹è¯•ç”¨ä¾‹ã€‚å¾…åˆ°å¼€å‘ä¿®æ”¹å®Œbugòq¶è{来新的测试版本,‹¹‹è¯•部开始进行第二轮的系¾lŸæµ‹è¯•,首先回归完问题单åQŒå†¾l§ç®‹˜q›è¡Œ‹¹‹è¯•åQŒç¼–写第二轮的测试报告,如此循环下去åQŒç›´åˆ°ç³»¾lŸæµ‹è¯•结束。在¾pȝ»Ÿ‹¹‹è¯•期间åQŒæµ‹è¯•äh员还需要编写验收手册,验收用例和资料测试用例等ã€?/p> <p>  完成¾pȝ»Ÿ‹¹‹è¯•后,软äšgž®±å¼€å§‹è{åˆ°åŽä¸ø™¿›è¡ŒéªŒæ”¶æµ‹è¯•,其中大概‹¹‹è¯•半个月,一般会要求‹¹‹è¯•éƒ¨æ´¾äººåˆ°åŽäØ“æ–¹è¿›è¡ŒååŠ©æµ‹è¯•ï¼Œòq¶å‘回问题单¾l™å…¬å¸å¼€å‘äh员修攏V€?/p> <p>  如果验收发现的缺é™ïLŽ‡åœ¨SOW规定的范围内åQŒé‚£ä¹ˆéªŒæ”¶æˆåŠŸï¼ŒåŽäØ“æ–¹ä»˜é’Þq»™å…¬å¸åQŒé¡¹ç›®ç»“束。如果超˜q‡è§„定的¾~ºé™·çŽ‡ï¼Œé‚£ä¹ˆå…¬å¸å¯èƒ½è¦ç½šé’׃º†åQŒæ•´ä¸ªé¡¹ç›®ç»„的成员(包括开发和‹¹‹è¯•åQ‰éƒ½å¯èƒ½è¦ç½šäº†ã€‚è¿™¿Uæƒ…况也会有åQŒå¦‚果按照流½E‹åšäº‹ï¼Œæ¦‚率不会很大ã€?/p> <p>  ‹¹‹è¯•‹¹ç¨‹çš„规范是很重要的åQŒä½†æ˜¯å¦‚æžœè¦æˆäØ“ä¼˜ç§€çš„æµ‹è¯•äh员只知道‹¹ç¨‹˜q˜æ˜¯ä¸å¤Ÿçš„,需要学习的东西˜q˜å¾ˆå¤šï¼ŒåŒ…括熟悉相关‹¹‹è¯•业务åQŒè®¡½Ž—机专业知识åQˆlinuxåQŒoracleåQŒtcp/ip½{‰ï¼‰åQŒå¼€å‘的架构和语­a€åQŒæ€§èƒ½‹¹‹è¯•和系¾lŸç“¶é¢ˆåˆ†æžã€è°ƒä¼˜ç­‰ã€‚还有性格åQˆç»†å¿ƒï¼Œè€å¿ƒåQ‰å’Œäººé™…沟通能力也是很重要的决定条件。ä“Q重而道˜qœï¼Œæˆ‘刚èµäh­¥åQŒå¸Œæœ›å¤§å®¶ä¸€èµ·åœ¨‹¹‹è¯•çš„èµ\上互åŠ×ƒº’勉ã€?/p> <p> </p> <img src ="http://www.aygfsteel.com/liaojiyong/aggbug/120496.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/liaojiyong/" target="_blank">liaojiyong</a> 2007-05-28 16:02 <a href="http://www.aygfsteel.com/liaojiyong/archive/2007/05/28/120496.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用的WEB功能‹¹‹è¯•æ–ÒŽ³•åQˆè{åQ‰î“¤http://www.aygfsteel.com/liaojiyong/archive/2007/02/14/99807.htmlliaojiyongliaojiyongWed, 14 Feb 2007 05:43:00 GMThttp://www.aygfsteel.com/liaojiyong/archive/2007/02/14/99807.htmlhttp://www.aygfsteel.com/liaojiyong/comments/99807.htmlhttp://www.aygfsteel.com/liaojiyong/archive/2007/02/14/99807.html#Feedback0http://www.aygfsteel.com/liaojiyong/comments/commentRss/99807.htmlhttp://www.aygfsteel.com/liaojiyong/services/trackbacks/99807.html  1. ™åµé¢é“¾æŽ¥‹‚€æŸ¥ï¼šæ¯ä¸€ä¸ªé“¾æŽ¥æ˜¯å¦éƒ½æœ‰å¯¹åº”çš„™åµé¢åQŒåƈ且页面之间切换正¼‹®ã€?

  2. 相关性检查:删除/增加一™å¹ä¼šä¸ä¼šå¯¹å…¶ä»–项产生影响åQŒå¦‚æžœäñ”生媄响,˜q™äº›å½±å“æ˜¯å¦éƒ½æ­£¼‹®ã€?

  3. ‹‚€æŸ¥æŒ‰é’®çš„功能是否正确åQšå¦‚update, cancel, delete, save½{‰åŠŸèƒ½æ˜¯å¦æ­£¼‹®ã€?

  4. 字符串长度检æŸ? 输入­‘…出需求所说明的字½W¦ä¸²é•¿åº¦çš„内å®? 看系¾lŸæ˜¯å¦æ£€æŸ¥å­—½W¦ä¸²é•¿åº¦,会不会出é”?

  5. 字符¾cÕdž‹‹‚€æŸ? 在应该输入指定类型的内容的地方输入其他类型的内容(如在应该输入整型的地方输入其他字½W¦ç±»åž?,看系¾lŸæ˜¯å¦æ£€æŸ¥å­—½W¦ç±»åž?会否报错.

  6. 标点½W¦å·‹‚€æŸ? 输入内容包括各种标点½W¦å·,特别是空æ ?各种引号,回èžRé”?看系¾lŸå¤„理是否正¼‹?

  7. 中文字符处理: 在可以输入中文的¾pȝ»Ÿè¾“入中文,看会否出çŽîCؕ码或出错.

  8. ‹‚€æŸ¥å¸¦å‡ÞZ¿¡æ¯çš„完整æ€? 在查看信息和update信息æ—?查看所填写的信息是不是全部带出.,带出信息和添加的是否一è‡?

  9. 信息重复: 在一些需要命å?且名字应该唯一的信息输入重复的名字或ID,看系¾lŸæœ‰æ²¡æœ‰å¤„理,会否报错,重名包括是否区分大小å†?以及在输入内容的前后输入½Iºæ ¼,¾pȝ»Ÿæ˜¯å¦ä½œå‡ºæ­£ç¡®å¤„理.

  10. ‹‚€æŸ¥åˆ é™¤åŠŸèƒ?在一些可以一‹Æ¡åˆ é™¤å¤šä¸ªä¿¡æ¯çš„地方,不选择ä»ÖM½•信息,按”deleteâ€?看系¾lŸå¦‚何处ç?会否出错;然后选择一个和多个信息,˜q›è¡Œåˆ é™¤,看是否正¼‹®å¤„ç?

  11. ‹‚€æŸ¥æ·»åŠ å’Œä¿®æ”¹æ˜¯å¦ä¸€è‡? ‹‚€æŸ¥æ·»åŠ å’Œä¿®æ”¹ä¿¡æ¯çš„è¦æ±‚æ˜¯å¦ä¸€è‡?例如æ·ÕdŠ è¦æ±‚å¿…å¡«çš„é¡¹,修改也应该必å¡?æ·ÕdŠ è§„å®šä¸ºæ•´åž‹çš„™å?修改也必™åÖMؓ整型.

  12. ‹‚€æŸ¥ä¿®æ”šw‡å?ä¿®æ”¹æ—¶æŠŠä¸èƒ½é‡åçš„é¡¹æ”¹äØ“å·²å­˜åœ¨çš„å†…å®¹,看会否处ç?报错.同时,也要注意,会不会报和自己重名的é”?

  13. 重复提交表单åQšä¸€æ¡å·²¾læˆåŠŸæäº¤çš„¾Uªå½•åQŒback后再提交åQŒçœ‹çœ‹ç³»¾lŸæ˜¯å¦åšäº†å¤„理ã€?

  14. ‹‚€æŸ¥å¤š‹Æ¡ä‹É用back键的情况: 在有back的地æ–?back,回到原来™åµé¢,再back,重复多次,看会否出é”?

  15. search‹‚€æŸ? 在有search功能的地方输入系¾lŸå­˜åœ¨å’Œä¸å­˜åœ¨çš„内容,看search¾l“果是否正确.如果可以输入多个search条äšg,可以同时æ·ÕdŠ åˆç†å’Œä¸åˆç†çš„æ¡ä»?看系¾lŸå¤„理是否正¼‹?

  16. 输入信息位置: 注意在光标停留的地方输入信息�光标和所输入的信息会否蟩到别的地�

  17. 上传下蝲文äšg‹‚€æŸ¥ï¼šä¸Šä¼ ä¸‹è²æ–‡äšg的功能是否实玎ͼŒä¸Šä¼ æ–‡äšg是否能打开。对上传文äšg的格式有何规定,¾pȝ»Ÿæ˜¯å¦æœ‰è§£é‡Šä¿¡æ¯ï¼Œòq¶æ£€æŸ¥ç³»¾lŸæ˜¯å¦èƒ½å¤Ÿåšåˆ°ã€?

  18. å¿…å¡«™åÒŽ£€æŸ¥ï¼šåº”该填写的项没有填写时系¾lŸæ˜¯å¦éƒ½åšäº†å¤„理åQŒå¯¹å¿…å¡«™åÒŽ˜¯å¦æœ‰æç¤ºä¿¡æ¯åQŒå¦‚在必填项前加*

  19. 快捷键检查:是否支持常用快捷键,如Ctrl+C Ctrl+V Backspace½{‰ï¼Œå¯¹ä¸€äº›ä¸å…è®¸è¾“入信息的字ŒDµï¼Œå¦‚选ähåQŒé€‰æ—¥æœŸå¯¹å¿«æ·æ–¹å¼æ˜¯å¦ä¹Ÿåšäº†é™åˆ¶ã€?

  20. 回èžR键检æŸ? 在输入结束后直接按回车键,看系¾lŸå¤„理如ä½?会否报错.



]]>
è¯?TDD çš„æ€È»“ http://www.aygfsteel.com/liaojiyong/archive/2007/01/18/94684.htmlliaojiyongliaojiyongThu, 18 Jan 2007 07:54:00 GMThttp://www.aygfsteel.com/liaojiyong/archive/2007/01/18/94684.htmlhttp://www.aygfsteel.com/liaojiyong/comments/94684.htmlhttp://www.aygfsteel.com/liaojiyong/archive/2007/01/18/94684.html#Feedback0http://www.aygfsteel.com/liaojiyong/comments/commentRss/94684.htmlhttp://www.aygfsteel.com/liaojiyong/services/trackbacks/94684.html è¯?/span> TDD çš„æ€È»“

				
						è¯Õd®ŒTDDåQˆæµ‹è¯•驱动开发)åQŒå‘现其中主要就是在反复说了˜q™ä¹ˆä¸¤äšg事情åQˆä¹Ÿž®±æ˜¯ä¸¤ä¸ª½Ž€å•的规则åQ‰ï¼šä¸€ã€åœ¨å†™ä“Q何代码之前,写一个会å¤ÞpÓ|的自动测试程序,卛_•元测试;二、消除重复设计,优化设计¾l“æž„åQŒå³é‡æž„。整本书都围¾l•着˜q™ä¸¤ä¸ªè§„则来˜q›è¡Œè¯´æ˜ŽåQŒå‘Šè¯‰è¯»è€…到底要如何˜q™æ ·åšï¼Ÿåˆå¦‚何分阶段应用˜q™äº›è§„则åQŸè¿™ä¸¤æ¡½Ž€å•的规则可以˜qç”¨å¤šæ·±åQ?span lang="EN-US">
				
		
				
						½W¬ä¸€éƒ¨åˆ†é€šè¿‡ä¸€ä¸ªç®€å•的实例来告诉读者如何ä‹Éç”?span lang="EN-US">TDDåQŒå¦‚何反复通过â€?/span>不可˜qè¡Œ/可运è¡?span lang="EN-US">/重构/不可˜qè¡Œ/可运è¡?span lang="EN-US">/重构â€?/span>来进行开发;½W¬äºŒéƒ¨åˆ†å‘Šè¯‰è¯»è€…如何ä‹É用单元测试,怎样¾l„织单元‹¹‹è¯•åQ›ç¬¬ä¸‰éƒ¨åˆ†åˆ™æ˜¯å°†TDD分解成较ž®çš„æ­¥éª¤æ¥è¿›è¡Œè¯¦¾l†è¯´æ˜Žï¼Œæ ÒŽ®æˆ‘对本书的理解,我认为需要完全将TDD˜qç”¨åˆ°æ—¥å¸¸çš„开发行ä¸ÞZ¸­åQŒåˆ™è¦æŒ‰ç…§ä»¥ä¸‹éžå¸¸ç»†ž®çš„æ­¥éª¤˜q›è¡ŒåQ?span lang="EN-US">
				
		

1.       获得ä»ÕdŠ¡ã€‚å³™å¹ç›®¾lç†å®‰æŽ’çš„ä“Q务。ä“Q务往往不止一™åV€‚将它们写入周工作计划表或者月工作计划表ã€?/span>

2.       选择ä»ÕdŠ¡ã€‚æ¯å¤©å¼€å§‹å·¥ä½œä¹‹å‰ï¼Œž®†ä»Šå¤©å°†è¦è§£å†³çš„é—®é¢˜å†™å…¥å·¥ä½œè®¡åˆ’åˆ—è¡¨ã€‚åÆˆé€‰æ‹©è‡ªå·±æœ€æœ‰æŠŠæ¡å®Œæˆçš„ä»ÕdŠ¡ä½œäØ“å½“å‰ä»ÕdŠ¡ã€?/span>

3.       分析òq¶åˆ†è§£ä“Q务。将当前ä»ÕdŠ¡åˆ†è§£æˆä¸€ä¸ªä¸ªç›¸å¯¹½Ž€å•的问题åQŒåˆ†è§£çš„问题最好是能在十多分钟之内能完成,òq¶å°†å®ƒä»¬å†™å…¥å·¥ä½œåˆ—表。如åQšè‹¥è¦å®žçŽ°å¤šå¸ç§ç›¸åŠ åQŒåˆ™å¯ä»¥åˆ†è§£ä¸ºï¼šå®žçŽ°ç›¸åŒå¸ç§ä¹‹é—´çš„ç›¸åŠ ï¼Œä¸åŒå¸ç§ä¹‹é—´çš„äº’æ¢ï¼Œæœ€åŽæ‰èƒ½å®žçŽîC¸åŒå¸¿Uä¹‹é—´çš„相加ã€?/span>

4.       写测试列表。将分解后的问题所对应的测试写入测试列表�/span>

5.       选择‹¹‹è¯•。从‹¹‹è¯•åˆ—è¡¨ä¸­é€‰æ‹©è‡ªå·±è®¤äØ“æœ€æœ‰æŠŠæ¡å®žçŽ°çš„ä¸€™åV€‚如åQšâ€œåŒå¸ç§ç›¸åŠ â€å¯¹æˆ‘æ¥è¯´æ˜¯æœ€æœ‰æŠŠæ¡å®žçŽ°çš„ä¸€™å¹ï¼Œå› æ­¤æˆ‘最先来实现它,卛_…ˆä»Žå®ƒçš„æµ‹è¯•程序开始编写ã€?/span>

6.       ¾~–写‹¹‹è¯•数据。写一个容易让人理解的必须实现的测试数据列表,ž®½é‡ä½¿ç”¨æ˜„¡„¶æ•°æ®ã€‚如åQšç”¨ String 表示 IP 地址 "255.255.255.255" 转换ä¸?/span> int åQŒåœ¨æˆ‘们写测试数据时应这样写åQ?/span> (255 << 24) + (255 << 16) + (255 << 8) + 255 åQŒè€Œä¸æ˜¯å†™â€?/span> -1 ”ã€?/span>

7.       ¾~–写‹¹‹è¯•。选择一™åÒŽœ€å®ÒŽ˜“让测试通过的测试数据加入测试方法。断­a€ä¼˜å…ˆåQŒç„¶åŽåŠ å…¥äØ“äº†è®©æ–­è¨€é€šè¿‡¾~–译的一切准备条件ã€?/span>

8.       ˜qè¡Œ‹¹‹è¯•åQŒä¸å¯è¿è¡ŒçŠ¶æ€ã€?/span>

9.       ¾~–写æ–ÒŽ³•注释åQŒæŠŠæ‰€æœ‰æƒ³åˆ°çš„该方法要实现的功能写上ã€?/span>

10.   ¾~–写功能代码åQŒä‹É之达到可˜qè¡ŒçŠ¶æ€ã€?/span>

11.   重构åQŒæ¶ˆé™¤é‡å¤è®¾è®¡ã€?/span>

12.   å¾€‹¹‹è¯•æ–ÒŽ³•中增加一个新的小‹¹‹è¯•ã€?/span>

13.   ˜qè¡Œ‹¹‹è¯•åQŒä¸å¯è¿è¡ŒçŠ¶æ€ã€?/span>

14.   修改功能代码åQŒä‹É之达到可˜qè¡ŒçŠ¶æ€ã€?/span>

15.   重构。消除重复设计�/span>

16.   重复 12-15 �/span>

17.   当无论如何也不能让该‹¹‹è¯•通过的时候,认真想一æƒÏx˜¯ä¸æ˜¯å“ªé‡Œå‡ºå¤§é—®é¢˜äº†ï¼Œå¦‚果实在想不出来的话åQŒå°±ž®†çŽ°æœ‰ä»£ç æ‰”æŽ‰ï¼Œé‡æ–°å¼€å§‹ã€?/span>

18.   所有测试都˜qè¡Œé€šè¿‡ä¹‹åŽåQŒä»”¾l†æ£€æŸ¥æ‰€æœ‰ä»£ç ï¼Œçœ‹æ˜¯å¦è¿˜æœ‰å€¼å¾—重构的地方,òq‰™‡æž„ã€?/span>

19.   提交 (check in) �/span>

20.   再选择‹¹‹è¯•列表中的下一个测试。重复以上步骤ã€?/span>

21.   当一天的工作¾l“束æ—Óž¼Œè‹¥æœ‰æŸä¸ªä»ÕdŠ¡æœªå®Œæˆï¼Œåˆ™ç•™ä¸‹ä¸€ä¸ªä¸å®Œæ•´‹¹‹è¯•åQŒä»¥ä¾¿äºŽ‹Æ¡æ—¥èƒ½è¿…速回忆è“v当时写该代码时的æƒÏx³•åQŒåƈ接着写下厅R€?/span>



]]>
TDD ½E‹åºä»£ç åQ?3åQ?http://www.aygfsteel.com/liaojiyong/archive/2007/01/18/94683.htmlliaojiyongliaojiyongThu, 18 Jan 2007 07:53:00 GMThttp://www.aygfsteel.com/liaojiyong/archive/2007/01/18/94683.htmlhttp://www.aygfsteel.com/liaojiyong/comments/94683.htmlhttp://www.aygfsteel.com/liaojiyong/archive/2007/01/18/94683.html#Feedback0http://www.aygfsteel.com/liaojiyong/comments/commentRss/94683.htmlhttp://www.aygfsteel.com/liaojiyong/services/trackbacks/94683.html

]]>
如何‹¹‹è¯•异常åQ?http://www.aygfsteel.com/liaojiyong/archive/2007/01/18/94681.htmlliaojiyongliaojiyongThu, 18 Jan 2007 07:52:00 GMThttp://www.aygfsteel.com/liaojiyong/archive/2007/01/18/94681.htmlhttp://www.aygfsteel.com/liaojiyong/comments/94681.htmlhttp://www.aygfsteel.com/liaojiyong/archive/2007/01/18/94681.html#Feedback0http://www.aygfsteel.com/liaojiyong/comments/commentRss/94681.htmlhttp://www.aygfsteel.com/liaojiyong/services/trackbacks/94681.htmlpublic void method()
{
      throw new RuntimeException("exception message");
}
public void testException()
�br />      try
      {
         method();
         fail();
      }
      catch(Exception e)
      {
         assertTrue(true);/或者此处不�br />      }
ï½?br />      通过˜q™ç§‹¹‹è¯•åQŒå¯ä»¥æµ‹è¯•方法中是否会达到期望的要求åQŒåœ¨æ–ÒŽ³•出现预期中的异常时是否会抛出该异常,若没有像期望的一æ ähŠ›å‡ºå¼‚å¸¸ï¼Œåˆ™å•å…ƒæµ‹è¯•ä¼š˜qè¡Œåˆ?fail();"使得单元‹¹‹è¯•不会通过。正常情况下是没有问题的。但是有的时候方法内部会有多个子æ–ÒŽ³•抛出同一个异常(或者说抛出的多个异帔Rƒ½¾l§æ‰¿äºŽåŒä¸€ä¸ªå¼‚常类åQ‰ï¼Œå› æ­¤˜q™ä¸ªæ—¶å€™æˆ‘们必™åÕd®šä½åˆ°æ˜¯å“ªä¸ªå­æ–ÒŽ³•抛出的异常,而通过以上æ–ÒŽ³•æ˜¯ä¸èƒ½è¾¾åˆ°è¿™ä¸ªç›®æ ‡çš„ã€‚äØ“äº†è¾¾åˆ°è¿™ä¸ªç›®æ ‡ï¼Œå¯ä»¥é€šè¿‡åˆ¤æ–­å¼‚å¸¸ä¸­çš„ä¿¡æ¯æ¥åˆ¤æ–­æ˜¯å“ªä¸ªå­æ–¹æ³•å‡ºé”™ã€‚é€šå¸¸åQŒç¨‹åºå‘˜ä¼šåœ¨æŠ›å‡ºå¼‚常时会ž®†äñ”ç”Ÿè¯¥å¼‚å¸¸çš„åŽŸå› å†™å…¥å¼‚å¸æ€¿¡æ¯ä¸­åQŒå¦‚åQšnew Exception(message)ã€‚å› æ­¤ï¼Œæˆ‘ä»¬åªè¦åœ¨å•å…ƒæµ‹è¯•ä¸­èƒ½æ•æ‰åˆ°è¯¥å¼‚å¸æ€¿¡æ¯ï¼Œå¾€å¾€ž®Þpƒ½å®šä½åˆ°è¯¥å¼‚常出现的位¾|®ã€?br />只需要将以上‹¹‹è¯•çš„catch块中的语句改为如下语句即可:
assertTrue(e.toString().contains(exception message));


]]>
数据的合法性检‹¹?http://www.aygfsteel.com/liaojiyong/archive/2007/01/18/94679.htmlliaojiyongliaojiyongThu, 18 Jan 2007 07:51:00 GMThttp://www.aygfsteel.com/liaojiyong/archive/2007/01/18/94679.htmlhttp://www.aygfsteel.com/liaojiyong/comments/94679.htmlhttp://www.aygfsteel.com/liaojiyong/archive/2007/01/18/94679.html#Feedback0http://www.aygfsteel.com/liaojiyong/comments/commentRss/94679.htmlhttp://www.aygfsteel.com/liaojiyong/services/trackbacks/94679.html

一般的数据¾c»éƒ½åº”该有自å·Þqš„æ•°æ®åˆæ³•性检查,如一个Person¾c»ï¼Œå®ƒçš„òq´é¾„属性是int型的åQŒä½†æ˜¯å¦‚果给它赋å€?0000åˆ™äØ“ä¸åˆæ³•ï¼Œä¸€ä¸ªäh不可能活那么长时间。因此需要在创徏该类的对象时必需对其˜q›è¡Œåˆæ³•性检查,若构造方法传入的是非法数据,则不让其创徏该对象,òq¶æŠ›å‡ºå¼‚å¸¸ã€‚ä¹Ÿè®¸å¤§å¤šæ•°äºø™®¤ä¸ºåªéœ€è¦å¯¹æž„造方法传入的参数˜q›è¡Œåˆæ³•性检查即可。如下所½Cºï¼š
class ValidClass
{
        int  dataValid1;
        String dataValid2;

         public ValidClass(int i, String str)
         {
               check(int i, String str);
               dataValid1 = i;
               dataValid2 = str;
         }

         void check(int i, String str)
         {
            if(i >100 && i <= 0) throws new RuntimeException("message");
            if(str == "str") throws new RuntimeException("message");
         }

         void setDataValid1(int dataValid1)
         {
               this.dataValid1 = dataValid1;
         }
}
实际上这¿Uåˆæ³•æ€§åÆˆä¸å¯é ï¼Œ˜q™æ ·åªæ˜¯ä¿è¯äº†åœ¨æž„造方法中传入的数据是合法的,但是不能保证½E‹åºå‘˜åœ¨ä½¿ç”¨è¯¥å¯¹è±¡æ—¶èƒ½ä¼ å…¥åˆæ³•的数据。如下程序代码:
ValidClass validClass = new ValidClass(2, "123");
validClass.set(200);
˜q™æ ·ä½¿ç”¨çš„话åQŒç¨‹åºè¿è¡Œåƈ不会报错åQŒä½†æ˜¯å®žé™…上我们已经传入了非法数据到该对象中åŽÖMº†åQŒå› æ­¤äؓ了避免出现程序员在ä‹É用的时候也犯这¿Ué”™è¯¯ï¼Œå¯ÒŽ•°æ®çš„合法性检查的正确方式应如下所½Cºï¼š
class ValidClass

       {

              int  dataValid;

             

              protected checkDataValid()

              {

                     check if dataValid valid

                     if (fail)

                     {     throws new RZXDataException(this, �needValidate=�/span>

+needValidate); }

              }

public ValidClass(int in)

              {    

setDataValid(in);    

}

              public setDataValid(int in)

              {                     
                     checkNeedValidate();

                     dataValid = in;

              }

       }

在setæ–ÒŽ³•中进行合法性检查,然后在构造方法中也调用setæ–ÒŽ³•讄¡½®å­—段å€û|¼Œè€Œä¸ç›´æŽ¥ä½¿ç”¨¾cÖM¸­çš„å­—ŒDüc€‚这样做的好处很明显åQšä¸ä»…保证了构造方法中传入的数据必™åÕdˆæ³•,而且可以保证½E‹åºåœ¨ä‹É用的˜q‡ç¨‹ä¸­ä¸èƒ½ä‹É用非法数据,如果½E‹åºå‘˜ä‹É用了非法数据åQŒç¨‹åºè¿è¡Œå¿…然出错,òq¶ä¸”能够很快的找到错误的æ ÒŽºæ‰€åœ¨ã€?br />
         另外åQŒæœ‰äº›ç¨‹åºå‘˜è®¤äØ“åQŒæœ‰äº›æ•°æ®ç±»çš„对象全部来自于另一个数据对象,也就是说该类的构造方法中的参数即另一个数据类对象åQŒå› æ­¤åœ¨è¯¥ç±»ä¸­æ‰€æœ‰ä¸Žè¢«ä¼ å…¥å¯¹è±¡ç±»ä¸­æœ‰ç›¸åŒçš„合法性检查的数据字段不需要再˜q›è¡Œåˆæ³•性检查了。其实这¿Uæƒ³æ³•æ˜¯é”™è¯¯çš„ï¼Œé—®é¢˜ä¸Žä¸Šé¢æ‰€è¯´çš„ä¸€æ øP¼Œä½ èƒ½ä¿è¯ä¼ å…¥çš„æ•°æ®æ˜¯åˆæ³•的,但不能保证ä‹É用者在调用你的setæ–ÒŽ³•时能100%传入合法数据。因此,½E‹åºå‘˜æ˜¯ä¸åº”该偷˜q™ä¸ªæ‡’的。也许有äºÞZ¼šè¯ß_¼Œä»–ä»¬çš„åˆæ³•æ€§æ£€æŸ¥å®Œå…¨ä¸€æ øP¼Œå¦‚果在该¾cÖM¸­å†å†™çš„话ž®×ƒ¼šå‡ºçŽ°å¤§é‡çš„é‡å¤ä»£ç äº†ã€‚èƒ½æƒ›_ˆ°˜q™é‡Œæ˜¯å¯¹çš„,但是如果你有一定的¾léªŒåQŒä½ ž®ÞqŸ¥é“去建立一个专门保存合法性检查方法的¾c»ï¼Œ˜q™æ ·ä½ å°±å¯ä»¥åœ¨éœ€è¦è¿›è¡Œåˆæ³•性检查的时候就使用该类里面的方法,如果该类中没有你所需要的æ–ÒŽ³•åQŒä½ ž®±å¯ä»¥åœ¨é‡Œé¢åŠ å…¥ä½ æ‰€éœ€è¦çš„åˆæ³•æ€§æ£€æŸ¥æ–¹æ³•ï¼Œå†åŽ»ä½¿ç”¨å®ƒã€‚è¿™æ ·åšä¼šä‹É得代码非常的清晰ã€?br />
         我认为,应该在自å·Þq±»ä¸­çš„æ‰€æœ‰ä‹É用“this.value = data;”字æ ïLš„代码都应该ä‹É用setValue()åQŒå› ä¸ÞZ¹Ÿè®¸è¿™ä¸ªå­—ŒD늎°åœ¨ä¸éœ€è¦è¿›è¡Œåˆæ³•性检查,但是不能保证ž®†æ¥ä¹Ÿæ²¡æœ‰åˆæ³•性要求。而一旦以后需要对该字ŒDµè¿›è¡Œåˆæ³•检查的时候,ž®±éœ€è¦åœ¨setæ–ÒŽ³•中增加合法性检查代码,而且需要将该类中所有对该字ŒD늚„èµ‹å€ÆD¯­å¥å‡æ”¹ç”¨setæ–ÒŽ³•。一旦有某处漏掉åQŒåˆ™å¾ˆå¯èƒ½å¸¦æ¥è‡´å‘½çš„错误。也许在某个˜qç®—中带来了非法数据åQŒä½†æ˜¯ä½ å´æ€Žä¹ˆä¹Ÿä¸ä¼šå¾€˜q™æ–¹é¢åŽ»æƒ»I¼Œå› äØ“ä½ ä¸€ç›´ä»¥ä¸ø™‡ªå·±å…¨éƒ¨éƒ½ä½œäº†åˆæ³•性检查的ã€?/p>

]]>
junit assert() 使用实例 http://www.aygfsteel.com/liaojiyong/archive/2007/01/18/94663.htmlliaojiyongliaojiyongThu, 18 Jan 2007 07:22:00 GMThttp://www.aygfsteel.com/liaojiyong/archive/2007/01/18/94663.htmlhttp://www.aygfsteel.com/liaojiyong/comments/94663.htmlhttp://www.aygfsteel.com/liaojiyong/archive/2007/01/18/94663.html#Feedback0http://www.aygfsteel.com/liaojiyong/comments/commentRss/94663.htmlhttp://www.aygfsteel.com/liaojiyong/services/trackbacks/94663.html

package com.liyingcheng.netTest;


import com.liyingcheng.net.Sort;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import junit.xiaoxuhui.Sum;


public class SortTest extends TestCase
{
 // Sort popObj = new Sort();

 public SortTest(String name)
 {
  super(name);
 }


 protected void setUp() throws Exception
 {
  super.setUp();
 }


 protected void tearDown() throws Exception
 {
  super.tearDown();
 }


 static public void assertEquals(int[] expected, int[] actual)
 {
  for(int i = 0; i < expected.length; i++)
  {
   assertEquals(null, expected[i], actual[i]);
  }
 }


 public void testPopSort()
 {
  int[] expected = new int[] {1, 2, 3, 4};
  assertEquals(expected, Sort.popSort(new int[] {1, 2, 4, 3}));
  assertEquals(expected, Sort.popSort(new int[] {1, 2, 3, 4}));
  assertEquals(expected, Sort.popSort(new int[] {1, 3, 4, 2}));
  assertEquals(expected, Sort.popSort(new int[] {1, 3, 2, 4}));
  assertEquals(expected, Sort.popSort(new int[] {2, 1, 4, 3}));
  assertEquals(expected, Sort.popSort(new int[] {2, 4, 1, 3}));
  assertEquals(expected, Sort.popSort(new int[] {3, 2, 4, 1}));
  assertEquals(new int[] {1, 2}, Sort.popSort(new int[] {2, 1}));
  // assertEquals(new int[]{1,3,2,4},popObj.popSort(new int[]{1,2,4,3}));
  // assertEquals(new int[]{1,2,3,4},popObj.popSort(new int[]{1,2,4,3}));
 }


 public void testCreateArray()
 {
  assertEquals(4, Sort.createArray(4).length);
 }


 public void testGetSum()
 {
  assertEquals(5050, Sum.getSum(1, 100));
 }


 public void testFalse()
 {
  assertFalse(false);
  assertTrue(true);
 }


 public void testIsNull()
 {
  String str1 = "";
  int[] arr1 = {};
  String str2 = null;
  int[] arr2 = null;
  assertNotNull(str1);
  assertNotNull(arr1);
  assertNull(str2);
  assertNull(arr2);
  // assertNull(str);
 }


 public void testNull()
 {
 }


 public void testNotSame()
 {
  String str1 = "123";
  String str2 = "123";
  String str3 = new String(str1);
  String str4 = new String("123");
  int one = 1;
  int first = 1;
  assertSame(one, first);
  assertSame(str1, str2);
  assertNotSame(str3, str4);
  //fail("hahahahahahahah");
  /*
   * assertNotSame(one,first); assertNotSame(str1,str2);
   */
 }


 public static Test suite()
 {
  TestSuite suite = new TestSuite("Test sort!");
  suite.addTestSuite(SortTest.class);
  return suite;
 }

}



]]>
从文件中取测试数据进行单元测�http://www.aygfsteel.com/liaojiyong/archive/2007/01/18/94659.htmlliaojiyongliaojiyongThu, 18 Jan 2007 07:20:00 GMThttp://www.aygfsteel.com/liaojiyong/archive/2007/01/18/94659.htmlhttp://www.aygfsteel.com/liaojiyong/comments/94659.htmlhttp://www.aygfsteel.com/liaojiyong/archive/2007/01/18/94659.html#Feedback0http://www.aygfsteel.com/liaojiyong/comments/commentRss/94659.htmlhttp://www.aygfsteel.com/liaojiyong/services/trackbacks/94659.html {
  @SuppressWarnings("unused")
  String line = "";
  FileReader myFileReader = new FileReader("com/liyingcheng/testFiles/TestPopSort.txt");//相对路径
  BufferedReader myBufferedReader=new BufferedReader(myFileReader);
  while((line = myBufferedReader.readLine())!=null)
  {
   if(line.startsWith("#"))
   {
    continue;
   }
   
   String[] tokens = line.split(",");
   
   int[] actual = {Integer.parseInt(tokens[0]),Integer.parseInt(tokens[1]),Integer.parseInt(tokens[2])};
   int[] expected = {Integer.parseInt(tokens[3]),Integer.parseInt(tokens[4]),Integer.parseInt(tokens[5])};
   testSinglePopSort(expected,actual);
  }
 }


]]>
Junit4功能 先睹为快. (译文) åQˆè{åQ?http://www.aygfsteel.com/liaojiyong/archive/2007/01/18/94657.htmlliaojiyongliaojiyongThu, 18 Jan 2007 07:19:00 GMThttp://www.aygfsteel.com/liaojiyong/archive/2007/01/18/94657.htmlhttp://www.aygfsteel.com/liaojiyong/comments/94657.htmlhttp://www.aygfsteel.com/liaojiyong/archive/2007/01/18/94657.html#Feedback0http://www.aygfsteel.com/liaojiyong/comments/commentRss/94657.htmlhttp://www.aygfsteel.com/liaojiyong/services/trackbacks/94657.html

]]>
TestSuiteçš„ä‹Éç”?http://www.aygfsteel.com/liaojiyong/archive/2007/01/18/94651.htmlliaojiyongliaojiyongThu, 18 Jan 2007 07:15:00 GMThttp://www.aygfsteel.com/liaojiyong/archive/2007/01/18/94651.htmlhttp://www.aygfsteel.com/liaojiyong/comments/94651.htmlhttp://www.aygfsteel.com/liaojiyong/archive/2007/01/18/94651.html#Feedback0http://www.aygfsteel.com/liaojiyong/comments/commentRss/94651.htmlhttp://www.aygfsteel.com/liaojiyong/services/trackbacks/94651.html您定义自å·Þqš„TestCaseåQŒåƈ使用TestRunner来运行测试,事实上TestRunneròq¶ä¸ç›´æŽ¥˜qè¡Œ TestCase上的单元æ–ÒŽ³•åQŒè€Œæ˜¯é€è¿‡TestSuiteåQŒTestSuite可以ž®†æ•°ä¸ªTestCaseåœ¨ä¸€èµøP¼Œè€Œè®©æ¯ä¸ªTestCase保持½Ž€å•ã€?br />
来看看一个例子:
  • MathToolTest.java
package onlyfun.caterpillar.test;

import onlyfun.caterpillar.MathTool;
import junit.framework.TestCase;

public class MathToolTest extends TestCase {
public MathToolTest(String testMethod) {
super(testMethod);
}

public void testGcd() {
assertEquals(5, MathTool.gcd(10, 5));
}

public static void main(String[] args) {
junit.textui.TestRunner.run(MathToolTest.class);
}
}

在这个例子中åQŒæ‚¨òq¶æ²¡æœ‰çœ‹åˆîC“Q何的TestSuiteåQŒäº‹å®žä¸ŠåQŒå¦‚果您没有提供ä»ÖM½•çš„TestSuiteåQŒTestRunner会自己徏立一个,然後˜q™ä¸ª TestSuite会ä‹É用反ž®„(reflectionåQ‰è‡ªåŠ¨æ‰¾å‡ºtestXXX()æ–ÒŽ³•ã€?br />
如果您要自行生成TestSuiteåQŒåˆ™åœ¨ç‘ô承TestCase之後åQŒæä¾›é™æ€çš„åQˆstaticåQ‰çš„suite()æ–ÒŽ³•åQŒä¾‹å¦‚:
public static Test suite() {
     return new TestSuite(MathTool.class);
}

如果您没有提供ä“Q何的TestSuiteåQŒåˆ™TestRunnerž®×ƒ¼šåƒä¸Šé¢è¿™æ ¯‚‡ªåŠ¨äØ“æ‚¨å¾ç«‹ä¸€ä¸ªï¼Œòq¶æ‰¾å‡ºtestXXX()æ–ÒŽ³•åQŒæ‚¨ä¹Ÿå¯ä»¥å¦‚下面定义 suite()æ–ÒŽ³•åQ?br />
public static Test suite() {
     TestSuite suite = new TestSuite(MathTool.class);
     suite.addTest(new MathToolTest("testGcd"));
     return suite;
}
 
JUnitòq¶æ²¡æœ‰è§„定您一定要使用testXXX()˜q™æ ·çš„æ–¹å¼æ¥å‘½åæ‚¨çš„‹¹‹è¯•æ–ÒŽ³•åQŒå¦‚果您要提供自å·Þqš„æ–ÒŽ³•åQˆå½“ç„¶JUnit 鼓励您ä‹É用testXXX()˜q™æ ·çš„æ–¹æ³•名¿UŽÍ¼‰åQŒåˆ™å¯ä»¥å¦‚上撰写åQŒäؓ了要能够使用建构函式提供‹¹‹è¯•æ–ÒŽ³•名称åQŒæ‚¨çš„TestCase必须提供如下的徏构函 式:
public MathToolTest(String testMethod) {
    super(testMethod);
}
 

如果要加入更多的‹¹‹è¯•æ–ÒŽ³•åQŒä‹É用addTest()ž®±å¯ä»¥äº†åQŒsuite()æ–ÒŽ³•传回一个TestSuite物äšgåQŒå®ƒä¸?TestCase都实作了Test介面åQŒTestRunner会调用TestSuite上的run()æ–ÒŽ³•åQŒç„¶å¾ŒTestSuite会将之委托给 TestCase上的run()æ–ÒŽ³•åQŒåƈ执行每一个testXXX()æ–ÒŽ³•ã€?br />
除了¾l„合TestCase之外åQŒæ‚¨˜q˜å¯ä»¥å°†æ•îC¸ªTestSuite¾l„åˆåœ¨ä¸€èµøP¼Œä¾‹å¦‚åQ?br />
public static Test suite() {
    TestSuite suite= new TestSuite();
    suite.addTestSuite(TestCase1.class);
    suite.addTestSuite(TestCase2.class);
    return suite;
}
 
如此之来åQŒæ‚¨å¯ä»¥ä¸€‹Æ¡è¿è¡Œæ‰€æœ‰çš„‹¹‹è¯•åQŒè€Œä¸å¿…个别的˜qè¡Œæ¯ä¸€ä¸ªæµ‹è¯•案例,您可以写一个运行全部测试的ä¸ÀLµ‹è¯•,而在使用TestRunner时呼å?suite()æ–ÒŽ³•åQŒä¾‹å¦‚:
junit.textui.TestRunner.run(TestAll.suite());

TestCase与TestSuite都实作了Test介面åQŒå…¶˜qè¡Œæ–¹å¼ä¸?Command 模式 的一个实例,而TestSuite可以¾l„合æ•îC¸ªTestSuite或TestCaseåQŒè¿™æ˜?Composite 模式 的一个实例ã€?/div>

]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ÇúË®ÏØ| ¬ÊÏÏØ| ôë½­ÏØ| ÁÙò£ÏØ| ÑôÔ­ÏØ| ÀÖÖÁÏØ| ½ðºþÏØ| ¸ßÌÆÏØ| ¿âÂׯì| ¹ãÎ÷| ÓãÌ¨ÏØ| ³ÐµÂÊÐ| Ôæ×¯ÊÐ| ×Ô¹±ÊÐ| ±Ï½ÚÊÐ| »ªÒõÊÐ| ·ï³ÇÊÐ| ¾©É½ÏØ| çÆÔÆÏØ| ÆÖ¶«ÐÂÇø| ÎÞé¦ÏØ| Óñ»·ÏØ| ºÍÌïÊÐ| Çí½áÏØ| Âé³ÇÊÐ| Þ»³ÇÊÐ| ÑôÉ½ÏØ| Æ½Ò£ÏØ| ×ñÒåÏØ| ñçÑôÊÐ| ò£ÉÏÏØ| Âú³ÇÏØ| ´óÎòÏØ| ¼ªÂ¡ÏØ| ½ÌÓý| ËæÖÝÊÐ| ÌïÑôÏØ| ¶¼À¼ÏØ| Û²³ÇÏØ| ÑôÐÂÏØ| ½Ò¶«ÏØ|