随心芸芸 @ 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 陈市明 阅读(2781) 评论(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 陈市明
呵呵,没关系的哈,我来保驾  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: