随心芸芸 @ JPeanut(旧版)

搬迁至 http://www.17m.net.cn/

语源科技BlogJava 首页 新随笔 联系 聚合 管理
  43 Posts :: 0 Stories :: 54 Comments :: 0 Trackbacks


作者:陈市明/Slipper Feng 摘自:http://www.blogjava.net/JPeanut

J2EE 是目前公认的比较慢的一种开发,相比 .net , php , asp 等而言。其实, j2ee 的开发者都深有体会的, java 代码编写的速度其实并不慢,在 eclipse 和 jbuilder 等可视化界面的帮助下,编写代码变的越来越简单;但是在调试的时候,每改完一个 java 或者 xml 代码要预览改的效果的话,必须要重新构建,部署,重启服务器 , 这些动作反反复复,消耗的时间不少。

近期为公司写了个单元测试的框架,基本上解决了反反复复构建,部署,重启服务器的问题。我们的项目的都是运用了类似 struts - spring - hibernate 的 MVC 架构(下面简称 ssh ),不同的就是中间的 aop 是自己开发实现的,而没有运用 spring 的。不过,我们的单元测试框架对标准的 struts - spring - hibernate 支持也挺好。

STRUTS原理图.JPG

上面的是在 ssh 的一次交互的原理图,做过 struts 开发者都会很熟悉。首先,是 jsp 通过 submit 的 url 将表单数据提交给后台 action 的 servlet ,后台通过在 struts-config.xml 中的配置找到相关的××× Action ,然后通过××× Service ,××× Dao 操作数据库,再将数据返回给另外一个 jsp ,让他显示结果。

模拟STRUTS的单元测试模拟图.JPG


上面的图是我们单元测试框架实现构建,部署,重启服务器的原理图。我们很容易从图上看的出来,我们写了个 Test ××× Action 来模拟 2 个 jsp 的动作,该类分成 2 部分上面一部分是模拟了 jsp 页面 submit 的动作(包括模拟提交给 url ,模拟提交数据),下面一部分是接收××× Action 返回的数据,然后,进行校验(此处的校验,我们用了 junit 的断言功能)。通过用 java 类来模拟 jsp 的好处在于,我们可以完全把这个一个交互作为一个 application 来运行起来,非常容易的做到单步调试,而不用到真实的平台上,启动服务器上运行。(注:此处有 2 个 db :开发 db 和测试 db ,这个再以后的介绍中会讲到)

我们还为在这个架构上开发制定了流程:

1 把当天需要开发的模块的 java 代码全部些好

2 通过这种模式调试 java 代码

3 在确保这些 java 代码无误后,构建,部署,启动服务器

4 然后编写所有的 jsp (因为修改 jsp 无需启动服务器)

这样,在开发一天的所有代码,几乎都不用怎么重启服务器,可以为开发人员省下很多时间,也使得开发人员喜欢的单步调试变的异常简单,提高代码的质量。

我们已经在真实的项目中实施了该流程的开发,得到的效果和预期的一样。当然还是比不过其他语言的开发,不过我们的架构还在不断改进(通过改进流程、编写 eclipse 等开发工具的插件等方法),使我们的开发人员可以更加快的进行 j2ee 的开发。


posted on 2006-04-18 23:04 陈市明 阅读(2929) 评论(9)  编辑  收藏 所属分类: 基于j2ee单元测试框架介绍

Feedback

# re: 基于j2ee单元测试框架介绍之一-调试无需启动中间件 2006-04-19 08:54 charon@xxx
兄弟,你们公司是不是闭门造车很久了???  回复  更多评论
  

# re: 基于j2ee单元测试框架介绍之一-调试无需启动中间件 2006-04-19 21:39 叶子
写得形象易懂,有针对性.赞!  回复  更多评论
  

# re: 基于j2ee单元测试框架介绍之一-调试无需启动中间件 2006-04-20 12:50 帆
同意楼上观点,写得8错,挺有思想的!赫赫!  回复  更多评论
  

# re: 基于j2ee单元测试框架介绍之一-调试无需启动中间件 2006-04-20 16:28 小陆
业务层应该初一dao和service层之间。
单元测试的重点应该在业务层上。

从你的图上,我没看见业务层。  回复  更多评论
  

# re: 基于j2ee单元测试框架介绍之一-调试无需启动中间件 2006-04-20 19:17 陈市明
@小陆
恩,单元测试重点在业务层面,我现在是通过action去调用到后台的业务层,所有的测试都是在action层面的。我这样做的目的使为了让单元测试做到功能测试的效果(呵呵,我使测试组成员,当然要减轻自己的工作量)。
其实,我这样做,通过代码覆盖率报告一样可以做到业务层的 测试,只是对业务层的容错出来还是很难测试到。  回复  更多评论
  

# re: 基于j2ee单元测试框架介绍之一-调试无需启动中间件 2006-04-25 14:43 广州大盗
创新的精神值得学习。
但一个问题是, 你们的系统似乎没有使用ejb。
如果使用ejb会怎么处理,主要是容器负责的事务等。

   正如你说的,你是testor; 而且我注意到你们的流程第一点:1 把当天需要开发的模块的 java 代码全部些好。所以 我的感觉是,这只是对测试人员来说,不用频繁部署和重启服务器; 而且“不用”的原因是:一天只部署一次,你看我说的对吗?
   所以,你讲的测试框架对来说coder并不适用。

  回复  更多评论
  

# re: 基于j2ee单元测试框架介绍之一-调试无需启动中间件 2006-04-25 19:40 陈市明
@广州大盗
呵呵,我们的项目的确是没有ejb的,,所以框架目前没有对ejb提供功能..但是,,并不是说完全没有办法..框架可以再'"基于j2ee单元测试框架介绍之二'"中可以看到,,框架有自己的插件协议,只要按照这个协议编写,,完全不用修改原来的代码,,久可以添加很多功能..,,当然也可以直接把junit的扩展封装下作为我们的插件用,,相信关于ejb的我们还是可以做到的..公司之前大家都认识很难解决的jms的问题也通过自己的编写jms插件来解决了..
对于事务,,我们的项目中都用jta的,,这个在这个框架中,,我们也通过编写了jta的模拟的transtraction,,在aop容器在内存中直接替换成我们的transation的了..虽然还是有点问题的,,但是还是解决这样的问题了..  回复  更多评论
  

# re: 基于j2ee单元测试框架介绍之一-调试无需启动中间件 2006-06-04 10:07 Slipper Feng
就要答辩了,紧张!  回复  更多评论
  

# re: 基于j2ee单元测试框架介绍之一-调试无需启动中间件 2006-06-05 23:51 陈市明
呵呵,没关系的哈,我来保驾  回复  更多评论