电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 在线教程-> JSP教程
JUnit源码分析(三)-JSP教程,Java技巧及代码
作者:网友供稿 点击:22
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 

三、微观——执行流程与代码风格











来过一遍junit的执行流程吧,这样你就能对junit有个清晰的认识,虽然作为一个使用者这完全是不必要的。从《junit in action》直接拿来一张junit流程图。



哦,也许你看晕了,我来当下导游好了。上面已经提到了testrunner是basetestrunner的子类,在三个不同的ui包中各有一个testrunner。这里我们仅以junit.textui包中的为例。











testrunner作为入口程序是怎么被启动的呢?习惯了使用容器的我们现在也许很少考虑这个问题。那我们在testrunner类里面找找吧,你看,你发现了这个:











public static void main(string args[]) {











这不是我们写小桌面程序时经常打交道的main方法么?对,就这么简单。











从这个main方法入口,首先junit将要分析命令行的参数,然后将检查测试类是否包含符合标准的suite方法,如果有就将执行方法中的内容(见图中0、1部分);如果没有找到将自动生成一个testsuite,这样就跳过了图中的0部分,并将测试用例类作为参数传入(见图中1部分)。











上面得到了一个testsuite类型的对象,现在就可以运行测试了,不过在运行前要先加载testresult和testlistener的对象(见图中2部分),用来监听和记录测试结果信息。剩下的在图中可以很容易的看懂了,你可以参照源码浏览一遍。 



这里提出我的一点疑问。注意到junit实践中提示将测试类中每个测试方法公用的初始化步骤放到setup方法中。这似乎会给你一种错觉,那就是你会认为setup与teardown中的语句对于一个测试类中的所有测试方法只会运行一次。但是实际上junit在实现上却出乎意料,setup对于测试类中的每个测试方法都回运行一遍。意思就是说,你把公用的初始化代码放到setup方法中仅仅是在代码结构上实现了重用,而没有起到任何优化系统的作用。比如你在setup中初始化数据库连接,那么这个过程将被执行不只一次,这可有点……。我们来看下代码:











//theclass为得到的testcase类,name为此类其中的一个方法











static public test createtest(class theclass, string name) {











       constructor constructor;











       try {











              constructor= gettestconstructor(theclass);











       ……











       object test;











       try {











//以下内容为获得一个testcase对象,并将方法名称传入这个对象











              if (constructor.getparametertypes().length == 0) {











                     test= constructor.newinstance(new object[0]);











                     if (test instanceof testcase)











                            ((testcase) test).setname(name);











              } else {











                     test= constructor.newinstance(new object[]{name});











              }











       ……











       //返回这个对象











       return (test) test;











}











再看下运行处的代码,下面的方法是运行在setup和teardown中间的











protected void runtest() throws throwable {











       //fname就是testcase对象所拥有的那个方法的名称











       assertnotnull(fname);











       method runmethod= null;











       try {











              //根据方法名由反射得到方法











              runmethod= getclass().getmethod(fname, null);











       }











       ……











              //执行测试方法











              runmethod.invoke(this, new class[0]);











……











       }











这样每执行一个测试方法就要运行一遍setup和teardown方法,大概就是这样一个过程:



恩……,也许这是为了兼容老的版本,也许是……。还好,junit提供了一个补救的扩展类,那就是我们上面提到的testsetup,在这里类里面真正的实现了setup、teardown方法的提取使用。你在使用的时候,通过继承来实现自己的setup、teardown方法,并使用装饰模式独有的调用方式来使用它就可以了。 



在阅读的过程中,代码风格上给我最明显的感觉就是,代码基本上全多做到了细化,将每个功能点单独提取到一个方法中,这样提高了代码的可复用性。可是在阅读的时候,在方法间频繁的跳跃,实在不是件好事,如果没有ide的帮助,我非要晕掉不可。











因此我认为在提高代码重用上还是要坚持这样的一条原则:到必要的时候再下手。就是说,在你刚开始写代码的时候不要考虑什么重用和扩展,只有当你真正需要复用某段代码或者扩展系统时,在动手吧(记得在某位牛人的书上是这么来比喻的:让第一颗子弹打中你)。











junit中使用的是老版本java collection,这大概是因为junit最初版本出现的时候还没有新版collection推出。这种代码不应该出现在我们现在编写的代码中了,请注意。












 四、总结








 四、总结









 四、总结










    好了,基本上分析完了junit的代码,不知道你学到了什么。希望本文能够起到抛砖引玉的作用。
文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·IReport与JasperReport开发详解一-JSP教程,Java技巧及代码
·JSTL(JSP标准标签库)介绍-JSP教程,资料/其它
·格式化输入日期时间控件 JieFormattedDateBox-JSP教程,Java技巧及代码
·JSTL简化JSP编码-JSP教程,Jsp/Servlet
·JUnit和单元测试入门简介-JSP教程,Java技巧及代码
·从数据库中读取一个图片并保存为一个图片文件-JSP教程,数据库相关
·Java Swing入门基础-JSP教程,Java技巧及代码
·IntelliJ IDEA培训-JSP教程,Java技巧及代码
·通过JSP的预编译消除性能瓶颈-JSP教程,Jsp/Servlet
·Java中利用JMF编写摄像头拍照程序-JSP教程,Java技巧及代码

最新文章
·J2ME中的时间处理方法
·J2ME播放声音流程简介
·J2ME开发之手机键盘使用注意问题
·J2ME 记录管理存储
·MVC模式在j2me项目中的应用(二)
·MVC模式在j2me项目中的应用(一)
·J2ME中使用记录存储系统(RMS)存储信息
·J2ME与MIDP开发(1)
·用简单的J2ME程序测试MIDlet的生命周期
·JAVA基础:提升JSP应用程序的七大绝招


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号