??xml version="1.0" encoding="utf-8" standalone="yes"?>a一区二区三区亚洲,激情欧美一区二区三区,国产精品久久久久久超碰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-1000QAEACFSJI-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多了,曑֜华ؓ帔Rq,也曾负责q项目的试Q感觉对华ؓ外包目的测试流E较熟悉Q故写些心得来与大家分n?/p> <p>      如果竞标成功Q项目就开始要启动了?/p> <p>      华ؓ方会提供一份CRS(客户需?和SOWQ工作Q务书Q,华ؓҎ来进行需求培训,q时该项目的试l长也要参与到项目需求的培训和评审,也就是测试工作应该从需求开始介入?/p> <p>      目l理~写《项目计划》,开发h员出《SRS》,q时试l长pҎSOW开始编写《测试计划》,其中包括人员QY件硬件资源,试点,集成序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用例别,预置条gQ操作步骤和预期l果。其中操作步骤和预期l果需要编写详l和明确。测试用例应该覆盖测试方案,而测试方案又覆盖了测试需求点Q这h能保证客户需求不遗漏。同P试用例也需要通过开发h员,试人员和华为方的评审,试l长也需要组l测试h员对试用例q行修改Q直到华为方评审通过?/p> <p>  在我们编写测试用例的阶段Q开发h员基本完成代码的~写Q同时完成单元测试。华为的外包目一般是一ơ性集成,所以Y件{试部后直接q行pȝ试。测试部对刚转过来的试版本q行预测试,如果软g未实现CheckList清单上的10Q,试部会把该版本打回。否则,软g转测试部q行pȝ试。根据《测试计划》进度安排,试l长q行多轮ơ的试Q每轮测试完成后试l长需要编写测试报告,其中包括用例执行通过情况Q缺陷分布情况,~陷产生原因Q测试中的风险等{,q时试人员׃改增加测试用例。待到开发修改完bugq{来新的测试版本,试部开始进行第二轮的系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计机专业知识QlinuxQoracleQtcp/ip{)Q开发的架构和语aQ性能试和系l瓶颈分析、调优等。还有性格Q细心,耐心Q和人际沟通能力也是很重要的决定条件。Q重而道q,我刚hQ希望大家一起在试的\上互׃勉?/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. 字符cd? 在应该输入指定类型的内容的地方输入其他类型的内容(如在应该输入整型的地方输入其他字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录Qback后再提交Q看看系l是否做了处理?

  14. 查多ơ用back键的情况: 在有back的地?back,回到原来面,再back,重复多次,看会否出?

  15. search? 在有search功能的地方输入系l存在和不存在的内容,看searchl果是否正确.如果可以输入多个search条g,可以同时d合理和不合理的条?看系l处理是否正?

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

  17. 上传下蝲文g查:上传下蝲文g的功能是否实玎ͼ上传文g是否能打开。对上传文g的格式有何规定,pȝ是否有解释信息,q检查系l是否能够做到?

  18. 必填Ҏ查:应该填写的项没有填写时系l是否都做了处理Q对必填Ҏ否有提示信息Q如在必填项前加*

  19. 快捷键检查:是否支持常用快捷键,如Ctrl+C Ctrl+V Backspace{,对一些不允许输入信息的字D,如选hQ选日期对快捷方式是否也做了限制?

  20. 回R键检? 在输入结束后直接按回车键,看系l处理如?会否报错.



liaojiyong 2007-02-14 13:43 发表评论
]]>
?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 的ȝ

				
						dTDDQ测试驱动开发)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">TDDQ如何反复通过?/span>不可q行/可运?span lang="EN-US">/重构/不可q行/可运?span lang="EN-US">/重构?/span>来进行开发;W二部分告诉读者如何用单元测试,怎样l织单元试Q第三部分则是将TDD分解成较的步骤来进行详l说明,Ҏ我对本书的理解,我认为需要完全将TDDq用到日常的开发行ZQ则要按照以下非常细的步骤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当时写该代码时的xQƈ接着写下厅R?/span>



liaojiyong 2007-01-18 15:54 发表评论
]]>
TDD E序代码Q?3Q?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

liaojiyong 2007-01-18 15:53 发表评论
]]>
如何试异常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();"使得单元试不会通过。正常情况下是没有问题的。但是有的时候方法内部会有多个子Ҏ抛出同一个异常(或者说抛出的多个异帔Rl承于同一个异常类Q,因此q个时候我们必d位到是哪个子Ҏ抛出的异常,而通过以上Ҏ是不能达到这个目标的。ؓ了达到这个目标,可以通过判断异常中的信息来判断是哪个子方法出错。通常Q程序员会在抛出异常时会生该异常的原因写入异怿息中Q如Qnew Exception(message)。因此,我们只要在单元测试中能捕捉到该异怿息,往往p定位到该异常出现的位|?br />只需要将以上试的catch块中的语句改为如下语句即可:
assertTrue(e.toString().contains(exception message));


liaojiyong 2007-01-18 15:52 发表评论
]]>
数据的合法性检?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数据合法性检查,如一个Personc,它的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但是实际上我们已经传入了非法数据到该对象中MQ因此ؓ了避免出现程序员在用的时候也犯这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Ҏ讄字段|而不直接使用cM的字Dc这样做的好处很明显Q不仅保证了构造方法中传入的数据必d法,而且可以保证E序在用的q程中不能用非法数据,如果E序员用了非法数据Q程序运行必然出错,q且能够很快的找到错误的Ҏ所在?br />
         另外Q有些程序员认ؓQ有些数据类的对象全部来自于另一个数据对象,也就是说该类的构造方法中的参数即另一个数据类对象Q因此在该类中所有与被传入对象类中有相同的合法性检查的数据字段不需要再q行合法性检查了。其实这U想法是错误的,问题与上面所说的一P你能保证传入的数据是合法的,但不能保证用者在调用你的setҎ时能100%传入合法数据。因此,E序员是不应该偷q个懒的。也许有Z_他们的合法性检查完全一P如果在该cM再写的话׃出现大量的重复代码了。能惛_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>

liaojiyong 2007-01-18 15:51 发表评论
]]>
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;
 }

}



liaojiyong 2007-01-18 15:22 发表评论
]]>
从文件中取测试数据进行单元测?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);
  }
 }


liaojiyong 2007-01-18 15:20 发表评论
]]>
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

liaojiyong 2007-01-18 15:19 发表评论
]]>
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您定义自qTestCaseQƈ使用TestRunner来运行测试,事实上TestRunnerq不直接q行 TestCase上的单元ҎQ而是透过TestSuiteQTestSuite可以数个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没有看CQ何的TestSuiteQ事实上Q如果您没有提供M的TestSuiteQTestRunner会自己徏立一个,然後q个 TestSuite会用反(reflectionQ自动找出testXXX()Ҏ?br />
如果您要自行生成TestSuiteQ则在承TestCase之後Q提供静态的QstaticQ的suite()ҎQ例如:
public static Test suite() {
     return new TestSuite(MathTool.class);
}

如果您没有提供Q何的TestSuiteQ则TestRunner׃像上面这栯动ؓ您徏立一个,q找出testXXX()ҎQ您也可以如下面定义 suite()ҎQ?br />
public static Test suite() {
     TestSuite suite = new TestSuite(MathTool.class);
     suite.addTest(new MathToolTest("testGcd"));
     return suite;
}
 
JUnitq没有规定您一定要使用testXXX()q样的方式来命名您的试ҎQ如果您要提供自qҎQ当然JUnit 鼓励您用testXXX()q样的方法名UͼQ则可以如上撰写Qؓ了要能够使用建构函式提供试Ҏ名称Q您的TestCase必须提供如下的徏构函 式:
public MathToolTest(String testMethod) {
    super(testMethod);
}
 

如果要加入更多的试ҎQ用addTest()可以了Qsuite()Ҏ传回一个TestSuite物gQ它?TestCase都实作了Test介面QTestRunner会调用TestSuite上的run()ҎQ然後TestSuite会将之委托给 TestCase上的run()ҎQƈ执行每一个testXXX()Ҏ?br />
除了l合TestCase之外Q您q可以将CTestSuitel合在一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合CTestSuite或TestCaseQ这?Composite 模式 的一个实例?/div>

liaojiyong 2007-01-18 15:15 发表评论
]]>
վ֩ģ壺 | ½| ƽ| ̰| ̫ԭ| | | | | ٳ| | | ̫| | | | ĩ| ˹| | ï| Ϫ| | ζ| | ƽԭ| | | | ԭ| | | | ɽ| | Ͻ| | ˫| ʡ| | ޼| ̰|