??xml version="1.0" encoding="utf-8" standalone="yes"?>成人影院在线,97在线超碰,国产日韩精品在线http://www.aygfsteel.com/JPeanut/category/10210.html搬迁?http://www.17m.net.cn/zh-cnTue, 27 Feb 2007 12:26:20 GMTTue, 27 Feb 2007 12:26:20 GMT60Zj2ee单元试框架介绍之三QJMS甉|插ghttp://www.aygfsteel.com/JPeanut/archive/2006/04/20/42215.html陈市?/dc:creator>陈市?/author>Thu, 20 Apr 2006 11:45:00 GMThttp://www.aygfsteel.com/JPeanut/archive/2006/04/20/42215.htmlhttp://www.aygfsteel.com/JPeanut/comments/42215.htmlhttp://www.aygfsteel.com/JPeanut/archive/2006/04/20/42215.html#Feedback0http://www.aygfsteel.com/JPeanut/comments/commentRss/42215.htmlhttp://www.aygfsteel.com/JPeanut/services/trackbacks/42215.html

作者:(x)陈市?/span>/Slipper Feng 摘自Qhttp://www.aygfsteel.com/JPeanut

       现在来多的系l不是独立运行的Q会(x)和其他系l进行交互。交互的方式又很多,从传l的面 post 到现在的 jms Q?/span> ws {。这个就l测试带来比较大的难度,特别是互盔R讯的系l不属于同一个公司。测试h员很隑֜一个办公室里面q行寚w目完整的试Q更何况Ҏ(gu)pȝ有的时候是没有试组的,只有开发h员兼职做试?/span>

       我这里主要是解决 jms 通讯的单元测试。在我们公司Q?/span> jms 的传输的数据密文传输Q因为历史原因被UCؓ(f)甉|Q。很多情况下我们都是通过 mock 来模拟队列和甉|的,我这里是通过重新?/span> jms ?/span> mq ?/span> jms ?/span> message 来实现的Q所有的数据不是通过模拟的东西,而是q入真实的队列中?/span>

   设计思想Q?/span>

模拟 MQ ?/span> JMS 的工作原理,~写一个本地的 MQ 和消息发送接收系l?/span>

在内存中直接替?/span> aop 容器中的 MQ ?/span> JMS 替换为本地的 MQ 和我们的消息处理

       具体设计Q?/span>

       1 Q电(sh)文接?/span>

新电(sh)文系l接收电(sh)文原?jpg

图表 1 新电(sh)文系l接收电(sh)文原?/span>

新电(sh)文接收系l:(x)其他pȝ如果要发送信息给我们的系l,是先讲电(sh)文发送给我们?/span> uecp q_Q然?/span> uecp 讲电(sh)文存攑ր?/span> MQ 中,我们目对从 MQ 中读出电(sh)文,然后Ҏ(gu)配据配置调用响应?/span> Service Q最后,一般情况, service 都是来操作数据库q行增删改动作?/span>

新电(sh)文^台的几大特点Q?/span>

Ø         甉|是异步传?/span>

Ø         甉|的是有时序的

Ø         一般来_(d)一个应用只有一个电(sh)文接攉?/span>


新电(sh)文接收的单元试原理.jpg

图表 2 新电(sh)文接收的单元试原理

针对新电(sh)文系l接收的原理和特点,可以分析出:(x)

Ø         甉|必须Ҏ(gu)本地的的Q单元测试做不到异步甉|的自动化回归

Ø         应用只有一个队列,我们只需要封装下 ArrayList 可以作为队列了

Ø         Z修改最话Q?/span> IBMMQProxy 的实现改?/span> JunitMessagingServerProxy Q然后,再通过 ioc 注入 junit ?/span> MQ ?/span> Junit ?/span> JMS

Ø         因ؓ(f)?/span> uecp 中可以看到电(sh)文的明文的,所以, Test***Action 发送电(sh)文也是明码,可以直接?/span> uecp 中的甉| copy 到程序中


  2)甉|发?br />新电(sh)文系l发送电(sh)文原?jpg

图表3新电(sh)文系l发送电(sh)文原?/span>

新电(sh)文发送系l:(x)我们的系l如果对其他多个pȝq行交互Q会(x)对几个队列分别发送数据,uecpdq些队列数据准发送到各个pȝ中?br />
新电(sh)文发送的单元试原理.jpg

图表4新电(sh)文发送的单元试原理

新电(sh)文发送的单元试原理比较单,是Test×××Action调用?x)引起发送电(sh)文的代码Q等q行完,去查看队列里面是不是我们预期发送的甉|?br />
通过q样的方式来q行对JMS的电(sh)文系l进行单元测试,可以做到自动化的回归试。因为实现电(sh)文的试功能是按照框架的插g协议~写Q在我们的系l中只要目TC注册一下电(sh)文插件就可以使用其功能,原来已有的测试脚本无需修改。后面还?x)后l开发关于socket和ws的传输方式的试插g?br />


]]>
Zj2ee单元试框架介绍之二Q测试框架设计思想http://www.aygfsteel.com/JPeanut/archive/2006/04/20/42043.html陈市?/dc:creator>陈市?/author>Wed, 19 Apr 2006 16:45:00 GMThttp://www.aygfsteel.com/JPeanut/archive/2006/04/20/42043.htmlhttp://www.aygfsteel.com/JPeanut/comments/42043.htmlhttp://www.aygfsteel.com/JPeanut/archive/2006/04/20/42043.html#Feedback0http://www.aygfsteel.com/JPeanut/comments/commentRss/42043.htmlhttp://www.aygfsteel.com/JPeanut/services/trackbacks/42043.html

作者:(x)陈市?/span>/Slipper Feng 摘自Qhttp://www.aygfsteel.com/JPeanut

Junit 目前?/span> java U最为流行的单元试的框Ӟ开发h员是~写设计模式的三大牛Z一?/span> junit 灉|的用了多种模式Q得扩展非怹Ҏ(gu)。他的扩展是所有单元测试框架是最多的Q但是很多扩展都是直接承自 TestCase Q这个就D用了q个扩展没法用其他的扩展了,比如Q用?/span> dbunit ׃能再?/span> easy struts 了(除非Q我们对扩展q行重写Q?/span>

  Z解决q个问题Q我?/span>Junit之上q封装了一?/span>TestFrameQ?/span>junit能够很容易的同时使用多个扩展。我们这里的设计思想是:(x)

1Q?span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  把扩展写成插件式Q我只要通过写一?/span> plugin 接口让他集成q我们的框架?/span>

2Q?span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  后期Ҏ(gu)构的功能扩展完全可以通过插g实现。目前,已经写了 dbunit Q?/span> struts-easy,imon fk Q?/span> JMS 甉|?/span> plugin 。通过插g的方式,我们可以很Ҏ(gu)的解?/span> junit 的硬伤:(x)试数据代码?/span>

3Q?span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  插g的添加,无需修改架构?qing)其原有的测试脚本,只需要在“项目的 TC ”中在注册中心对插g注册可以获得插件的所有的功能

4Q?span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  架构是面向对目的,所有不同架构的目可以使用同一套底层架构,不一L(fng)只是“项?/span> Tc ?/span>

5Q?span style="font-family: "Times New Roman"; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">  Test Frame Work 、所有的 plugin 和项?/span> TC 都可以各自独立打?/span> jar Q这h架可以很方便的进行局部升U?/span>

 

Q呵呵,有了甉|插g后,很Ҏ(gu)的对我们的项目进行自动化的单元测试。在ơ之前,我们一直没有对甉|q行有效的自动化的单元测试, mock 技术可以实玎ͼ但是Q对于需求变?/span> mock 没有很好的解军_法)

单元试框架的设计思想.jpg



]]>
Zj2ee单元试框架介绍之一Q调试无需启动中间?/title><link>http://www.aygfsteel.com/JPeanut/archive/2006/04/18/41768.html</link><dc:creator>陈市?/dc:creator><author>陈市?/author><pubDate>Tue, 18 Apr 2006 15:04:00 GMT</pubDate><guid>http://www.aygfsteel.com/JPeanut/archive/2006/04/18/41768.html</guid><wfw:comment>http://www.aygfsteel.com/JPeanut/comments/41768.html</wfw:comment><comments>http://www.aygfsteel.com/JPeanut/archive/2006/04/18/41768.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.aygfsteel.com/JPeanut/comments/commentRss/41768.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/JPeanut/services/trackbacks/41768.html</trackback:ping><description><![CDATA[ <p class="MsoNormal" style="text-indent: 21pt;"> <span lang="EN-US"> <br /> </span> </p> <p class="MsoNormal" style="text-indent: 21pt;" align="right"> </p> <p class="MsoNormal" style="text-indent: 21.75pt;" align="right"> </p> <p class="MsoNormal" style="text-indent: 21.75pt;" align="right"> </p> <p class="MsoNormal" style="text-indent: 21.75pt;" align="right"> <font size="2">作者:(x)<span style="text-decoration: underline;">陈市?/span></font>/Slipper Feng <font size="2"><span style="font-family: 宋体;"> 摘自Qhttp://www.aygfsteel.com/JPeanut</span></font></p> <p class="MsoNormal" style="text-indent: 21.75pt;" align="right"> <font size="2"> <span style="font-family: 宋体;"> </span> </font> </p> <p class="MsoNormal" style="text-indent: 21.75pt;" align="right"> <font size="2"> <span style="font-family: 宋体;"> </span> </font> </p> <p class="MsoNormal" style="text-indent: 21pt;" align="right"> </p> <p class="MsoNormal" style="text-indent: 21pt;"> <span lang="EN-US">J2EE</span> <span style="font-family: 宋体;">是目前公认的比较慢的一U开发,相比</span> <span lang="EN-US">.net</span> <span style="font-family: 宋体;">Q?/span> <span lang="EN-US">php</span> <span style="font-family: 宋体;">Q?/span> <span lang="EN-US">asp</span> <span style="font-family: 宋体;">{而言。其实,</span> <span lang="EN-US">j2ee</span> <span style="font-family: 宋体;">的开发者都深有体会(x)的,</span> <span lang="EN-US">java</span> <span style="font-family: 宋体;">代码~写的速度其实q不慢,?/span> <span lang="EN-US">eclipse</span> <span style="font-family: 宋体;">?/span> <span lang="EN-US">jbuilder</span> <span style="font-family: 宋体;">{可视化界面的帮助下Q编写代码变的越来越单;但是在调试的时候,每改完一?/span> <span lang="EN-US">java</span> <span style="font-family: 宋体;">或?/span> <span lang="EN-US">xml</span> <span style="font-family: 宋体;">代码要预览改的效果的话,必须要重新构建,部vQ重启服务器</span> <span lang="EN-US">,</span> <span style="font-family: 宋体;">q些动作反反复复Q消耗的旉不少?/span> </p> <p class="MsoNormal" style="text-indent: 21pt;"> <span style="font-family: 宋体;">q期为公司写了个单元试的框Ӟ基本上解决了反反复复构徏Q部|Ԍ重启服务器的问题。我们的目的都是运用了cM</span> <span lang="EN-US">struts</span> <span style="font-family: 宋体;">Q?/span> <span lang="EN-US">spring</span> <span style="font-family: 宋体;">Q?/span> <span lang="EN-US">hibernate</span> <span style="font-family: 宋体;">?/span> <span lang="EN-US">MVC</span> <span style="font-family: 宋体;">架构Q下面简U?/span> <span lang="EN-US">ssh</span> <span style="font-family: 宋体;">Q,不同的就是中间的</span> <span lang="EN-US">aop</span> <span style="font-family: 宋体;">是自己开发实现的Q而没有运?/span> <span lang="EN-US">spring</span> <span style="font-family: 宋体;">的。不q,我们的单元测试框架对标准?/span> <span lang="EN-US">struts</span> <span style="font-family: 宋体;">Q?/span> <span lang="EN-US">spring</span> <span style="font-family: 宋体;">Q?/span> <span lang="EN-US">hibernate</span> <span style="font-family: 宋体;">支持也挺好?/span> </p> <img alt="STRUTS原理?JPG" src="http://www.aygfsteel.com/images/blogjava_net/jpeanut/%E5%9F%BA%E4%BA%8Ej2ee%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E6%A1%86%E6%9E%B6%E4%BB%8B%E7%BB%8D/STRUTS%E5%8E%9F%E7%90%86%E5%9B%BE.JPG" title="STRUTS原理?JPG" border="0" height="292" width="573" /> <br /> <p class="MsoNormal" style="margin-left: 5.25pt; text-indent: 15.75pt;"> <span style="font-family: 宋体;">上面的是?/span> <span lang="EN-US">ssh</span> <span style="font-family: 宋体;">的一ơ交互的原理图,做过</span> <span lang="EN-US">struts</span> <span style="font-family: 宋体;">开发者都?x)很熟(zhn)。首先,?/span> <span lang="EN-US">jsp</span> <span style="font-family: 宋体;">通过</span> <span lang="EN-US">submit</span> <span style="font-family: 宋体;">?/span> <span lang="EN-US">url</span> <span style="font-family: 宋体;">表单数据提交给后台</span> <span lang="EN-US">action</span> <span style="font-family: 宋体;">?/span> <span lang="EN-US">servlet</span> <span style="font-family: 宋体;">Q后台通过?/span> <span lang="EN-US">struts-config.xml</span> <span style="font-family: 宋体;">中的配置扑ֈ相关的××?/span> <span lang="EN-US">Action</span> <span style="font-family: 宋体;">Q然后通过×××</span> <span lang="EN-US">Service</span> <span style="font-family: 宋体;">Q××?/span> <span lang="EN-US">Dao</span> <span style="font-family: 宋体;">操作数据库,再将数据q回l另外一?/span> <span lang="EN-US">jsp</span> <span style="font-family: 宋体;">Q让他显C结果?/span> </p> <img alt="模拟STRUTS的单元测试模拟图.JPG" src="http://www.aygfsteel.com/images/blogjava_net/jpeanut/%E5%9F%BA%E4%BA%8Ej2ee%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E6%A1%86%E6%9E%B6%E4%BB%8B%E7%BB%8D/%E6%A8%A1%E6%8B%9FSTRUTS%E7%9A%84%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E6%A8%A1%E6%8B%9F%E5%9B%BE.JPG" title="模拟STRUTS的单元测试模拟图.JPG" border="0" height="307" width="563" /> <br /> <p class="MsoNormal" style="text-indent: 21.75pt;" align="right"> <span style="font-family: 宋体;"> <br /> </span> </p> <p class="MsoNormal" style="text-indent: 21.75pt;"> <span style="font-family: 宋体;">上面的图是我们单元测试框架实现构建,部vQ重启服务器的原理图。我们很Ҏ(gu)从图上看的出来,我们写了?/span> <span lang="EN-US">Test</span> <span style="font-family: 宋体;">×××</span> <span lang="EN-US">Action</span> <span style="font-family: 宋体;">来模?/span> <span lang="EN-US">2</span> <span style="font-family: 宋体;">?/span> <span lang="EN-US">jsp</span> <span style="font-family: 宋体;">的动作,该类分成</span> <span lang="EN-US">2</span> <span style="font-family: 宋体;">部分上面一部分是模拟了</span> <span lang="EN-US">jsp</span> <span style="font-family: 宋体;">面</span> <span lang="EN-US">submit</span> <span style="font-family: 宋体;">的动作(包括模拟提交l?/span> <span lang="EN-US">url</span> <span style="font-family: 宋体;">Q模拟提交数据)Q下面一部分是接收××?/span> <span lang="EN-US">Action</span> <span style="font-family: 宋体;">q回的数据,然后Q进行校验(此处的校验,我们用了</span> <span lang="EN-US">junit</span> <span style="font-family: 宋体;">的断a功能Q。通过?/span> <span lang="EN-US">java</span> <span style="font-family: 宋体;">cL模拟</span> <span lang="EN-US">jsp</span> <span style="font-family: 宋体;">的好处在于,我们可以完全把这个一个交互作Z?/span> <span lang="EN-US">application</span> <span style="font-family: 宋体;">来运行v来,非常Ҏ(gu)的做到单步调试,而不用到真实的^CQ启动服务器上运行。(注:(x)此处?/span> <span lang="EN-US">2</span> <span style="font-family: 宋体;">?/span> <span lang="EN-US">db</span> <span style="font-family: 宋体;">Q开?/span> <span lang="EN-US">db</span> <span style="font-family: 宋体;">和测?/span> <span lang="EN-US">db</span> <span style="font-family: 宋体;">Q这个再以后的介l中?x)讲刎ͼ?/span> </p> <p class="MsoNormal" style="text-indent: 21.75pt;"> <span style="font-family: 宋体;">我们qؓ(f)在这个架构上开发制定了程Q?/span> </p> <p class="MsoNormal" style="margin-left: 39.75pt; text-indent: -18pt;"> <span lang="EN-US"> <span>1</span> </span> <span style="font-family: 宋体;">把当天需要开发的模块?/span> <span lang="EN-US">java</span> <span style="font-family: 宋体;">代码全部些好</span> </p> <p class="MsoNormal" style="margin-left: 39.75pt; text-indent: -18pt;"> <span lang="EN-US"> <span>2</span> </span> <span style="font-family: 宋体;">通过q种模式调试</span> <span lang="EN-US">java</span> <span style="font-family: 宋体;">代码</span> </p> <p class="MsoNormal" style="margin-left: 39.75pt; text-indent: -18pt;"> <span lang="EN-US"> <span>3</span> </span> <span style="font-family: 宋体;">在确保这?/span> <span lang="EN-US">java</span> <span style="font-family: 宋体;">代码无误后,构徏Q部|Ԍ启动服务?/span> </p> <p class="MsoNormal" style="margin-left: 39.75pt; text-indent: -18pt;"> <span lang="EN-US"> <span>4</span> </span> <span style="font-family: 宋体;">然后~写所有的</span> <span lang="EN-US">jsp</span> <span style="font-family: 宋体;">Q因Z?/span> <span lang="EN-US">jsp</span> <span style="font-family: 宋体;">无需启动服务器)</span> </p> <p class="MsoNormal" style="text-indent: 21pt;"> <span style="font-family: 宋体;">q样Q在开发一天的所有代码,几乎都不用怎么重启服务器,可以为开发h员省下很多时_(d)也得开发h员喜Ƣ的单步调试变的异常单,提高代码的质量?/span> </p> <p class="MsoNormal" style="text-indent: 21pt;"> <span style="font-family: 宋体;">我们已经在真实的目中实施了该流E的开发,得到的效果和预期的一栗当然还是比不过其他语言的开发,不过我们的架构还在不断改q(通过改进程、编?/span> <span lang="EN-US">eclipse</span> <span style="font-family: 宋体;">{开发工L(fng)插g{方法)Q我们的开发h员可以更加快的进?/span> <span lang="EN-US">j2ee</span> <span style="font-family: 宋体;">的开发?/span> </p> <br /> <img src ="http://www.aygfsteel.com/JPeanut/aggbug/41768.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/JPeanut/" target="_blank">陈市?/a> 2006-04-18 23:04 <a href="http://www.aygfsteel.com/JPeanut/archive/2006/04/18/41768.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Zj2ee单元试框架介绍http://www.aygfsteel.com/JPeanut/archive/2006/04/18/41767.html陈市?/dc:creator>陈市?/author>Tue, 18 Apr 2006 15:03:00 GMThttp://www.aygfsteel.com/JPeanut/archive/2006/04/18/41767.htmlhttp://www.aygfsteel.com/JPeanut/comments/41767.htmlhttp://www.aygfsteel.com/JPeanut/archive/2006/04/18/41767.html#Feedback0http://www.aygfsteel.com/JPeanut/comments/commentRss/41767.htmlhttp://www.aygfsteel.com/JPeanut/services/trackbacks/41767.html

作者:(x)陈市?/span>/Slipper Feng 摘自Qhttp://www.aygfsteel.com/JPeanut

q入似组也有不少旉了,很多旉都?/span> 51testing 论坛里,混在“测试时代组”的 qq 里Q和做测试的朋友聊,聊久了就产生了很多想法。呵呵,x变成现实嘛,改不了开发的老本行,l合我们公司的开发流E现Ӟ自己动手写了一套关于测试架构,方便我们试和开发?/span>

该架构主要有实现了一下几点功能:(x)

1 调试无需启动中间?/span>

2 数据和测试代码部分隔?/span>

3 自动生成试文档

4 单元试实现功能试

5 实现回归试自动?/span>

6 。。。。?/span>

在后面的一些时_(d)我会(x)陆箋详细的从各个角度来介l这个架构,架构也还在陆l开发和改进中?/span>



]]>
վ֩ģ壺 | | | | | | | ɽ| | | | ˫| Դ| ɽ| | | Ϫ| | | | | | ³| Ϊ| ɳ| ˳| ƽ| | | | | Ϫ| | | Ĭ| | | | | | ¹Ȫ|