﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-随心芸芸 @ JPeanut（旧版）-随笔分类-基于j2ee单元测试框架介绍</title><link>http://www.blogjava.net/JPeanut/category/10210.html</link><description>搬迁至 http://www.17m.net.cn/</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:26:20 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:26:20 GMT</pubDate><ttl>60</ttl><item><title>基于j2ee单元测试框架介绍之三－JMS电文插件</title><link>http://www.blogjava.net/JPeanut/archive/2006/04/20/42215.html</link><dc:creator>陈市明</dc:creator><author>陈市明</author><pubDate>Thu, 20 Apr 2006 11:45:00 GMT</pubDate><guid>http://www.blogjava.net/JPeanut/archive/2006/04/20/42215.html</guid><wfw:comment>http://www.blogjava.net/JPeanut/comments/42215.html</wfw:comment><comments>http://www.blogjava.net/JPeanut/archive/2006/04/20/42215.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/JPeanut/comments/commentRss/42215.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JPeanut/services/trackbacks/42215.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="text-indent: 21.75pt;" align="right">
		</p>
		<p class="MsoNormal" style="text-indent: 21.75pt;" align="right">
				<font size="2">作者：<span style="text-decoration: underline;">陈市明</span></font>/Slipper Feng
				<font size="2"><span style="font-family: 宋体;"> 摘自：http://www.blogjava.net/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">
				<span lang="EN-US">
						<span style="">       </span>
				</span>
				<span style="font-family: 宋体;">现在越来越多的系统不是独立运行的，会和其他系统进行交互。交互的方式又很多，从传统的页面</span>
				<span lang="EN-US">post</span>
				<span style="font-family: 宋体;">到现在的</span>
				<span lang="EN-US">jms</span>
				<span style="font-family: 宋体;">，</span>
				<span lang="EN-US">ws</span>
				<span style="font-family: 宋体;">等。这个就给测试带来比较大的难度，特别是互相通讯的系统不属于同一个公司。测试人员很难在一个办公室里面进行对项目完整的测试，更何况对方系统有的时候是没有测试小组的，只有开发人员兼职做测试。</span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US">
						<span style="">       </span>
				</span>
				<span style="font-family: 宋体;">我这里主要是解决</span>
				<span lang="EN-US">jms</span>
				<span style="font-family: 宋体;">通讯的单元测试。在我们公司，</span>
				<span lang="EN-US">jms</span>
				<span style="font-family: 宋体;">的传输的数据密文传输（因为历史原因被称为电文）。很多情况下我们都是通过</span>
				<span lang="EN-US">mock</span>
				<span style="font-family: 宋体;">来模拟队列和电文的，我这里是通过重新写</span>
				<span lang="EN-US">jms</span>
				<span style="font-family: 宋体;">的</span>
				<span lang="EN-US">mq</span>
				<span style="font-family: 宋体;">和</span>
				<span lang="EN-US">jms</span>
				<span style="font-family: 宋体;">的</span>
				<span lang="EN-US">message</span>
				<span style="font-family: 宋体;">来实现的，所有的数据不是通过模拟的东西，而是进入真实的队列中。</span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">   <b>设计思想</b>：</span>
		</p>
		<p class="MsoNormal" style="margin-left: 42pt;">
				<span style="font-family: 宋体;">模拟</span>
				<span lang="EN-US">MQ</span>
				<span style="font-family: 宋体;">和</span>
				<span lang="EN-US">JMS</span>
				<span style="font-family: 宋体;">的工作原理，编写一个本地的</span>
				<span lang="EN-US">MQ</span>
				<span style="font-family: 宋体;">和消息发送接收系统</span>
		</p>
		<p class="MsoNormal" style="margin-left: 42pt;">
				<span style="font-family: 宋体;">在内存中直接将替换</span>
				<span lang="EN-US">aop</span>
				<span style="font-family: 宋体;">容器中的</span>
				<span lang="EN-US">MQ</span>
				<span style="font-family: 宋体;">、</span>
				<span lang="EN-US">JMS</span>
				<span style="font-family: 宋体;">替换为本地的</span>
				<span lang="EN-US">MQ</span>
				<span style="font-family: 宋体;">和我们的消息处理</span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US">
						<span style="">       </span>
				</span>
				<span style="font-family: 宋体;">
						<b>具体设计</b>：</span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US">
						<span style="">       </span>1</span>
				<span style="font-family: 宋体;">）电文接收</span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">
						<img src="http://www.blogjava.net/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%96%B0%E7%94%B5%E6%96%87%E7%B3%BB%E7%BB%9F%E6%8E%A5%E6%94%B6%E7%94%B5%E6%96%87%E5%8E%9F%E7%90%86.jpg" alt="新电文系统接收电文原理.jpg" border="0" height="310" width="585" />
				</span>
		</p>
		<p class="MsoNormal">
		</p>
		<p class="MsoCaption" style="text-align: center;" align="center">
				<span style="font-family: 黑体;">图表</span>
				<!--[if supportFields]><span
lang=EN-US><span style='mso-element:field-begin'></span><span
style='mso-spacerun:yes'> </span>SEQ </span><span style='font-family:黑体;
mso-ascii-font-family:Arial'>图表</span><span lang=EN-US> \* ARABIC <span
style='mso-element:field-separator'></span></span><![endif]-->
				<span lang="EN-US">
						<span style="">1</span>
				</span>
				<!--[if supportFields]><span
lang=EN-US><span style='mso-element:field-end'></span></span><![endif]-->
				<span style="font-family: 黑体;">新电文系统接收电文原理</span>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<span style="font-family: 宋体;">新电文接收系统：其他系统如果要发送信息给我们的系统，是先讲电文发送给我们的</span>
				<span lang="EN-US">uecp</span>
				<span style="font-family: 宋体;">平台，然后</span>
				<span lang="EN-US">uecp</span>
				<span style="font-family: 宋体;">讲电文存放倒</span>
				<span lang="EN-US">MQ</span>
				<span style="font-family: 宋体;">中，我们项目对从</span>
				<span lang="EN-US">MQ</span>
				<span style="font-family: 宋体;">中读出电文，然后根据配据配置调用响应的</span>
				<span lang="EN-US">Service</span>
				<span style="font-family: 宋体;">，最后，一般情况，</span>
				<span lang="EN-US">service</span>
				<span style="font-family: 宋体;">都是来操作数据库进行增删改动作。</span>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<span style="font-family: 宋体;">新电文平台的几大特点：</span>
		</p>
		<p class="MsoNormal" style="margin-left: 63pt; text-indent: -21pt;">
				<!--[if !supportLists]-->
				<span style="font-family: Wingdings;" lang="EN-US">
						<span style="">Ø<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span>
				</span>
				<!--[endif]-->
				<span style="font-family: 宋体;">电文是异步传输</span>
		</p>
		<p class="MsoNormal" style="margin-left: 63pt; text-indent: -21pt;">
				<!--[if !supportLists]-->
				<span style="font-family: Wingdings;" lang="EN-US">
						<span style="">Ø<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span>
				</span>
				<!--[endif]-->
				<span style="font-family: 宋体;">电文的是有时序的</span>
		</p>
		<p class="MsoNormal" style="margin-left: 63pt; text-indent: -21pt;">
				<!--[if !supportLists]-->
				<span style="font-family: Wingdings;" lang="EN-US">
						<span style="">Ø<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span>
				</span>
				<!--[endif]-->
				<span style="font-family: 宋体;">一般来说，一个应用只有一个电文接收队列</span>
		</p>
		<p class="MsoNormal">
				<br />
				<span style="font-family: 宋体;">
				</span>
		</p>
		<p class="MsoNormal">
				<span style="font-family: 宋体;">
						<img src="http://www.blogjava.net/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%96%B0%E7%94%B5%E6%96%87%E6%8E%A5%E6%94%B6%E7%9A%84%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E5%8E%9F%E7%90%86.jpg" alt="新电文接收的单元测试原理.jpg" border="0" height="343" width="618" />
				</span>
		</p>
		<p class="MsoNormal">
		</p>
		<p class="MsoCaption" style="text-align: center;" align="center">
				<span style="font-family: 黑体;">图表</span>
				<!--[if supportFields]><span
lang=EN-US><span style='mso-element:field-begin'></span><span
style='mso-spacerun:yes'> </span>SEQ </span><span style='font-family:黑体;
mso-ascii-font-family:Arial'>图表</span><span lang=EN-US> \* ARABIC <span
style='mso-element:field-separator'></span></span><![endif]-->
				<span lang="EN-US">
						<span style="">2</span>
				</span>
				<!--[if supportFields]><span
lang=EN-US><span style='mso-element:field-end'></span></span><![endif]-->
				<span style="font-family: 黑体;">新电文接收的单元测试原理</span>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<span style="font-family: 宋体;">针对新电文系统接收的原理和特点，可以分析出：</span>
		</p>
		<p class="MsoNormal" style="margin-left: 63pt; text-indent: -21pt;">
				<!--[if !supportLists]-->
				<span style="font-family: Wingdings;" lang="EN-US">
						<span style="">Ø<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span>
				</span>
				<!--[endif]-->
				<span style="font-family: 宋体;">电文必须改成本地的的，单元测试做不到异步电文的自动化回归</span>
		</p>
		<p class="MsoNormal" style="margin-left: 63pt; text-indent: -21pt;">
				<!--[if !supportLists]-->
				<span style="font-family: Wingdings;" lang="EN-US">
						<span style="">Ø<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span>
				</span>
				<!--[endif]-->
				<span style="font-family: 宋体;">应用只有一个队列，我们只需要封装下</span>
				<span lang="EN-US">ArrayList</span>
				<span style="font-family: 宋体;">就可以作为队列了</span>
		</p>
		<p class="MsoNormal" style="margin-left: 63pt; text-indent: -21pt;">
				<!--[if !supportLists]-->
				<span style="font-family: Wingdings;" lang="EN-US">
						<span style="">Ø<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span>
				</span>
				<!--[endif]-->
				<span style="font-family: 宋体;">为了修改最小话，</span>
				<span lang="EN-US">IBMMQProxy</span>
				<span style="font-family: 宋体;">的实现改成</span>
				<span lang="EN-US">JunitMessagingServerProxy</span>
				<span style="font-family: 宋体;">，然后，再通过</span>
				<span lang="EN-US">ioc</span>
				<span style="font-family: 宋体;">注入</span>
				<span lang="EN-US">junit</span>
				<span style="font-family: 宋体;">的</span>
				<span lang="EN-US">MQ</span>
				<span style="font-family: 宋体;">和</span>
				<span lang="EN-US">Junit</span>
				<span style="font-family: 宋体;">的</span>
				<span lang="EN-US">JMS</span>
		</p>
		<p class="MsoNormal" style="margin-left: 63pt; text-indent: -21pt;">
				<!--[if !supportLists]-->
				<span style="font-family: Wingdings;" lang="EN-US">
						<span style="">Ø<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">        
</span></span>
				</span>
				<!--[endif]-->
				<span style="font-family: 宋体;">因为在</span>
				<span lang="EN-US">uecp</span>
				<span style="font-family: 宋体;">中可以看到电文的明文的，所以，</span>
				<span lang="EN-US">Test***Action</span>
				<span style="font-family: 宋体;">发送电文也是明码，可以直接把</span>
				<span lang="EN-US">uecp</span>
				<span style="font-family: 宋体;">中的电文</span>
				<span lang="EN-US">copy</span>
				<span style="font-family: 宋体;">到程序中</span>
		</p>
		<br />  2)电文发送<br /><img src="http://www.blogjava.net/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%96%B0%E7%94%B5%E6%96%87%E7%B3%BB%E7%BB%9F%E5%8F%91%E9%80%81%E7%94%B5%E6%96%87%E5%8E%9F%E7%90%86.jpg" alt="新电文系统发送电文原理.jpg" border="0" height="317" width="650" /><br /><p class="MsoCaption" style="text-align: center;" align="center"><span style="font-family: 黑体;">图表</span><!--[if supportFields]><span
lang=EN-US><span style='mso-element:field-begin'></span><span
style='mso-spacerun:yes'> </span>SEQ </span><span style='font-family:黑体;
mso-ascii-font-family:Arial'>图表</span><span lang=EN-US> \* ARABIC <span
style='mso-element:field-separator'></span></span><![endif]--><span lang="EN-US"><span style="">3</span></span><!--[if supportFields]><span
lang=EN-US><span style='mso-element:field-end'></span></span><![endif]--><span style="font-family: 黑体;">新电文系统发送电文原理</span></p><span style="font-size: 10.5pt; font-family: 宋体;">新电文发送系统：我们的系统如果对其他多个系统进行交互，会对几个队列分别发送数据，</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">uecp</span><span style="font-size: 10.5pt; font-family: 宋体;">读取这些队列将数据准确发送到各个系统中。<br /><br /><img src="http://www.blogjava.net/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%96%B0%E7%94%B5%E6%96%87%E5%8F%91%E9%80%81%E7%9A%84%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E5%8E%9F%E7%90%86.jpg" alt="新电文发送的单元测试原理.jpg" border="0" height="364" width="585" /><br /></span><p class="MsoCaption" style="text-align: center;" align="center"><span style="font-family: 黑体;">图表</span><!--[if supportFields]><span
lang=EN-US><span style='mso-element:field-begin'></span><span
style='mso-spacerun:yes'> </span>SEQ </span><span style='font-family:黑体;
mso-ascii-font-family:Arial'>图表</span><span lang=EN-US> \* ARABIC <span
style='mso-element:field-separator'></span></span><![endif]--><span lang="EN-US"><span style="">4</span></span><!--[if supportFields]><span
lang=EN-US><span style='mso-element:field-end'></span></span><![endif]--><span style="font-family: 黑体;">新电文发送的单元测试原理</span></p><span style="font-size: 10.5pt; font-family: 宋体;">新电文发送的单元测试原理比较简单，就是</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">Test</span><span style="font-size: 10.5pt; font-family: 宋体;">×××</span><span style="font-size: 10.5pt; font-family: &quot;Times New Roman&quot;;" lang="EN-US">Action</span><span style="font-size: 10.5pt; font-family: 宋体;">调用会引起发送电文的代码，等运行完，就去查看队列里面是不是我们预期发送的电文。<br /><br />通过这样的方式来进行对JMS的电文系统进行单元测试，可以做到自动化的回归测试。因为实现电文的测试功能是按照框架的插件协议编写，在我们的系统中只要项目TC注册一下电文插件就可以使用其功能，原来已有的测试脚本无需修改。后面还会后续开发关于socket和ws的传输方式的测试插件。<br /></span><img src ="http://www.blogjava.net/JPeanut/aggbug/42215.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JPeanut/" target="_blank">陈市明</a> 2006-04-20 19:45 <a href="http://www.blogjava.net/JPeanut/archive/2006/04/20/42215.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于j2ee单元测试框架介绍之二－测试框架设计思想</title><link>http://www.blogjava.net/JPeanut/archive/2006/04/20/42043.html</link><dc:creator>陈市明</dc:creator><author>陈市明</author><pubDate>Wed, 19 Apr 2006 16:45:00 GMT</pubDate><guid>http://www.blogjava.net/JPeanut/archive/2006/04/20/42043.html</guid><wfw:comment>http://www.blogjava.net/JPeanut/comments/42043.html</wfw:comment><comments>http://www.blogjava.net/JPeanut/archive/2006/04/20/42043.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/JPeanut/comments/commentRss/42043.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JPeanut/services/trackbacks/42043.html</trackback:ping><description><![CDATA[
		<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">作者：<span style="text-decoration: underline;">陈市明</span></font>/Slipper Feng
				<font size="2"><span style="font-family: 宋体;"> 摘自：http://www.blogjava.net/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: 10.5pt;">
				<span lang="EN-US">Junit</span>
				<span style="font-family: 宋体;">目前是</span>
				<span lang="EN-US">java</span>
				<span style="font-family: 宋体;">种最为流行的单元测试的框架，开发人员是编写设计模式的三大牛人之一。</span>
				<span lang="EN-US">junit</span>
				<span style="font-family: 宋体;">灵活的使用了多种模式，使得扩展非常之容易。他的扩展是所有单元测试框架是最多的，但是很多扩展都是直接继承自</span>
				<span lang="EN-US">TestCase</span>
				<span style="font-family: 宋体;">，这个就导致用了这个扩展就没法使用其他的扩展了，比如，用了</span>
				<span lang="EN-US">dbunit</span>
				<span style="font-family: 宋体;">就不能再用</span>
				<span lang="EN-US">easy struts</span>
				<span style="font-family: 宋体;">了（除非，我们对扩展进行重写）。</span>
		</p>
		<p class="MsoNormal">  <span style="font-family: 宋体;">为了解决这个问题，我在</span><span lang="EN-US">Junit</span><span style="font-family: 宋体;">之上还封装了一层</span><span lang="EN-US">TestFrame</span><span style="font-family: 宋体;">，使得</span><span lang="EN-US">junit</span><span style="font-family: 宋体;">能够很容易的同时使用多个扩展。我们这里的设计思想是：</span></p>
		<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;">
				<!--[if !supportLists]-->
				<span style="" lang="EN-US">
						<span style="">1．<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> 
</span></span>
				</span>
				<!--[endif]-->
				<span style="font-family: 宋体;">把扩展写成插件式，我只要通过写一个</span>
				<span lang="EN-US">plugin</span>
				<span style="font-family: 宋体;">接口让他集成进我们的框架中</span>
		</p>
		<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;">
				<!--[if !supportLists]-->
				<span style="" lang="EN-US">
						<span style="">2．<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> 
</span></span>
				</span>
				<!--[endif]-->
				<span style="font-family: 宋体;">后期对架构的功能扩展完全可以通过插件实现。目前，已经写了</span>
				<span lang="EN-US">dbunit</span>
				<span style="font-family: 宋体;">，</span>
				<span lang="EN-US">struts-easy,imon
fk</span>
				<span style="font-family: 宋体;">，</span>
				<span lang="EN-US">JMS</span>
				<span style="font-family: 宋体;">电文的</span>
				<span lang="EN-US">plugin </span>
				<span style="font-family: 宋体;">。通过插件的方式，我们就可以很容易的解决</span>
				<span lang="EN-US">junit</span>
				<span style="font-family: 宋体;">的硬伤：测试数据硬代码。</span>
		</p>
		<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;">
				<!--[if !supportLists]-->
				<span style="" lang="EN-US">
						<span style="">3．<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> 
</span></span>
				</span>
				<!--[endif]-->
				<span style="font-family: 宋体;">插件的添加，无需修改架构及其原有的测试脚本，只需要在“项目的</span>
				<span lang="EN-US">TC</span>
				<span style="font-family: 宋体;">”中在注册中心对插件注册就可以获得插件的所有的功能</span>
		</p>
		<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;">
				<!--[if !supportLists]-->
				<span style="" lang="EN-US">
						<span style="">4．<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> 
</span></span>
				</span>
				<!--[endif]-->
				<span style="font-family: 宋体;">架构是面向对项目的，所有不同架构的项目可以使用同一套底层架构，不一样的只是“项目</span>
				<span lang="EN-US">Tc</span>
				<span style="font-family: 宋体;">”</span>
		</p>
		<p class="MsoNormal" style="margin-left: 18pt; text-indent: -18pt;">
				<!--[if !supportLists]-->
				<span style="" lang="EN-US">
						<span style="">5．<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;"> 
</span></span>
				</span>
				<!--[endif]-->
				<span lang="EN-US">Test Frame Work</span>
				<span style="font-family: 宋体;">、所有的</span>
				<span lang="EN-US">plugin</span>
				<span style="font-family: 宋体;">和项目</span>
				<span lang="EN-US">TC</span>
				<span style="font-family: 宋体;">都可以各自独立打成</span>
				<span lang="EN-US">jar</span>
				<span style="font-family: 宋体;">，这样框架可以很方便的进行局部升级</span>
		</p>
		<p class="MsoNormal">
				<span lang="EN-US">
						<o:p> </o:p>
				</span>
		</p>
		<p class="MsoNormal" style="text-indent: 18pt;">
				<span style="font-family: 宋体;">（呵呵，有了电文插件后，就很容易的对我们的项目进行自动化的单元测试。在次之前，我们一直没有对电文进行有效的自动化的单元测试，</span>
				<span lang="EN-US">mock</span>
				<span style="font-family: 宋体;">技术可以实现，但是，对于需求变化</span>
				<span lang="EN-US">mock</span>
				<span style="font-family: 宋体;">没有很好的解决办法）</span>
		</p>
		<p class="MsoNormal" style="text-indent: 18pt;">
				<span style="font-family: 宋体;">
						<img src="http://www.blogjava.net/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/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95%E6%A1%86%E6%9E%B6%E7%9A%84%E8%AE%BE%E8%AE%A1%E6%80%9D%E6%83%B3.jpg" alt="单元测试框架的设计思想.jpg" title="单元测试框架的设计思想" border="0" height="351" width="581" />
						<br />
				</span>
		</p>
<img src ="http://www.blogjava.net/JPeanut/aggbug/42043.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JPeanut/" target="_blank">陈市明</a> 2006-04-20 00:45 <a href="http://www.blogjava.net/JPeanut/archive/2006/04/20/42043.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于j2ee单元测试框架介绍之一－调试无需启动中间件</title><link>http://www.blogjava.net/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.blogjava.net/JPeanut/archive/2006/04/18/41768.html</guid><wfw:comment>http://www.blogjava.net/JPeanut/comments/41768.html</wfw:comment><comments>http://www.blogjava.net/JPeanut/archive/2006/04/18/41768.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/JPeanut/comments/commentRss/41768.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/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">作者：<span style="text-decoration: underline;">陈市明</span></font>/Slipper Feng
				<font size="2"><span style="font-family: 宋体;"> 摘自：http://www.blogjava.net/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: 宋体;">是目前公认的比较慢的一种开发，相比</span>
				<span lang="EN-US">.net</span>
				<span style="font-family: 宋体;">，</span>
				<span lang="EN-US">php</span>
				<span style="font-family: 宋体;">，</span>
				<span lang="EN-US">asp</span>
				<span style="font-family: 宋体;">等而言。其实，</span>
				<span lang="EN-US">j2ee</span>
				<span style="font-family: 宋体;">的开发者都深有体会的，</span>
				<span lang="EN-US">java</span>
				<span style="font-family: 宋体;">代码编写的速度其实并不慢，在</span>
				<span lang="EN-US">eclipse</span>
				<span style="font-family: 宋体;">和</span>
				<span lang="EN-US">jbuilder</span>
				<span style="font-family: 宋体;">等可视化界面的帮助下，编写代码变的越来越简单；但是在调试的时候，每改完一个</span>
				<span lang="EN-US">java</span>
				<span style="font-family: 宋体;">或者</span>
				<span lang="EN-US">xml</span>
				<span style="font-family: 宋体;">代码要预览改的效果的话，必须要重新构建，部署，重启服务器</span>
				<span lang="EN-US">,</span>
				<span style="font-family: 宋体;">这些动作反反复复，消耗的时间不少。</span>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<span style="font-family: 宋体;">近期为公司写了个单元测试的框架，基本上解决了反反复复构建，部署，重启服务器的问题。我们的项目的都是运用了类似</span>
				<span lang="EN-US">struts</span>
				<span style="font-family: 宋体;">－</span>
				<span lang="EN-US">spring</span>
				<span style="font-family: 宋体;">－</span>
				<span lang="EN-US">hibernate</span>
				<span style="font-family: 宋体;">的</span>
				<span lang="EN-US">MVC</span>
				<span style="font-family: 宋体;">架构（下面简称</span>
				<span lang="EN-US">ssh</span>
				<span style="font-family: 宋体;">），不同的就是中间的</span>
				<span lang="EN-US">aop</span>
				<span style="font-family: 宋体;">是自己开发实现的，而没有运用</span>
				<span lang="EN-US">spring</span>
				<span style="font-family: 宋体;">的。不过，我们的单元测试框架对标准的</span>
				<span lang="EN-US">struts</span>
				<span style="font-family: 宋体;">－</span>
				<span lang="EN-US">spring</span>
				<span style="font-family: 宋体;">－</span>
				<span lang="EN-US">hibernate</span>
				<span style="font-family: 宋体;">支持也挺好。</span>
		</p>
		<img alt="STRUTS原理图.JPG" src="http://www.blogjava.net/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: 宋体;">开发者都会很熟悉。首先，是</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: 宋体;">，后台通过在</span>
				<span lang="EN-US">struts-config.xml</span>
				<span style="font-family: 宋体;">中的配置找到相关的×××</span>
				<span lang="EN-US">Action</span>
				<span style="font-family: 宋体;">，然后通过×××</span>
				<span lang="EN-US">Service</span>
				<span style="font-family: 宋体;">，×××</span>
				<span lang="EN-US">Dao</span>
				<span style="font-family: 宋体;">操作数据库，再将数据返回给另外一个</span>
				<span lang="EN-US">jsp</span>
				<span style="font-family: 宋体;">，让他显示结果。</span>
		</p>
		<img alt="模拟STRUTS的单元测试模拟图.JPG" src="http://www.blogjava.net/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: 宋体;">上面的图是我们单元测试框架实现构建，部署，重启服务器的原理图。我们很容易从图上看的出来，我们写了个</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: 宋体;">的动作（包括模拟提交给</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">junit</span>
				<span style="font-family: 宋体;">的断言功能）。通过用</span>
				<span lang="EN-US">java</span>
				<span style="font-family: 宋体;">类来模拟</span>
				<span lang="EN-US">jsp</span>
				<span style="font-family: 宋体;">的好处在于，我们可以完全把这个一个交互作为一个</span>
				<span lang="EN-US">application</span>
				<span style="font-family: 宋体;">来运行起来，非常容易的做到单步调试，而不用到真实的平台上，启动服务器上运行。（注：此处有</span>
				<span lang="EN-US">2</span>
				<span style="font-family: 宋体;">个</span>
				<span lang="EN-US">db</span>
				<span style="font-family: 宋体;">：开发</span>
				<span lang="EN-US">db</span>
				<span style="font-family: 宋体;">和测试</span>
				<span lang="EN-US">db</span>
				<span style="font-family: 宋体;">，这个再以后的介绍中会讲到）</span>
		</p>
		<p class="MsoNormal" style="text-indent: 21.75pt;">
				<span style="font-family: 宋体;">我们还为在这个架构上开发制定了流程：</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: 宋体;">通过这种模式调试</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: 宋体;">代码无误后，构建，部署，启动服务器</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: 宋体;">（因为修改</span>
				<span lang="EN-US">jsp</span>
				<span style="font-family: 宋体;">无需启动服务器）</span>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<span style="font-family: 宋体;">这样，在开发一天的所有代码，几乎都不用怎么重启服务器，可以为开发人员省下很多时间，也使得开发人员喜欢的单步调试变的异常简单，提高代码的质量。</span>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<span style="font-family: 宋体;">我们已经在真实的项目中实施了该流程的开发，得到的效果和预期的一样。当然还是比不过其他语言的开发，不过我们的架构还在不断改进（通过改进流程、编写</span>
				<span lang="EN-US">eclipse</span>
				<span style="font-family: 宋体;">等开发工具的插件等方法），使我们的开发人员可以更加快的进行</span>
				<span lang="EN-US">j2ee</span>
				<span style="font-family: 宋体;">的开发。</span>
		</p>
		<br />
<img src ="http://www.blogjava.net/JPeanut/aggbug/41768.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JPeanut/" target="_blank">陈市明</a> 2006-04-18 23:04 <a href="http://www.blogjava.net/JPeanut/archive/2006/04/18/41768.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于j2ee单元测试框架介绍</title><link>http://www.blogjava.net/JPeanut/archive/2006/04/18/41767.html</link><dc:creator>陈市明</dc:creator><author>陈市明</author><pubDate>Tue, 18 Apr 2006 15:03:00 GMT</pubDate><guid>http://www.blogjava.net/JPeanut/archive/2006/04/18/41767.html</guid><wfw:comment>http://www.blogjava.net/JPeanut/comments/41767.html</wfw:comment><comments>http://www.blogjava.net/JPeanut/archive/2006/04/18/41767.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/JPeanut/comments/commentRss/41767.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/JPeanut/services/trackbacks/41767.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="text-indent: 21.75pt;">
				<span style="font-family: 宋体;">
						<br />
				</span>
		</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">作者：<span style="text-decoration: underline;">陈市明</span></font>/Slipper Feng
				<font size="2"><span style="font-family: 宋体;"> 摘自：http://www.blogjava.net/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;">
				<span style="font-family: 宋体;">进入测似小组也有不少时间了，很多时间都泡在</span>
				<span lang="EN-US">51testing</span>
				<span style="font-family: 宋体;">论坛里，混在“测试时代组”的</span>
				<span lang="EN-US">qq</span>
				<span style="font-family: 宋体;">群里，和做测试的朋友聊，聊久了就产生了很多想法。呵呵，想法变成现实嘛，改不了开发的老本行，结合我们公司的开发流程现状，自己动手写了一套关于测试架构，方便我们测试和开发。</span>
		</p>
		<p class="MsoNormal" style="text-indent: 21.75pt;">
				<span style="font-family: 宋体;">该架构主要有实现了一下几点功能：</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>
		</p>
		<p class="MsoNormal" style="margin-left: 39.75pt; text-indent: -18pt;">
				<span lang="EN-US">
						<span>2</span>
				</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>
		</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>
		</p>
		<p class="MsoNormal" style="margin-left: 39.75pt; text-indent: -18pt;">
				<span lang="EN-US">
						<span>5</span>
				</span>
				<span style="font-family: 宋体;">实现回归测试自动化</span>
		</p>
		<p class="MsoNormal" style="margin-left: 39.75pt; text-indent: -18pt;">
				<span lang="EN-US">
						<span>6</span>
				</span>
				<span style="font-family: 宋体;">。。。。。</span>
		</p>
		<p class="MsoNormal" style="text-indent: 21pt;">
				<span style="font-family: 宋体;">在后面的一些时间，我会陆续详细的从各个角度来介绍这个架构，架构也还在陆续开发和改进中。</span>
		</p>
<img src ="http://www.blogjava.net/JPeanut/aggbug/41767.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/JPeanut/" target="_blank">陈市明</a> 2006-04-18 23:03 <a href="http://www.blogjava.net/JPeanut/archive/2006/04/18/41767.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>