当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:14:00  来源:本站整理

<b>追求代码质量 - 测试Struts遗留的操纵程序</b>[Java编程]

赞助商链接



  本文“<b>追求代码质量 - 测试Struts遗留的操纵程序</b>[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

基于 Java™ 的Web开辟范畴近来呈现了丰富的竞争性技术.启动新 项目的开辟人员可以在很多差别的框架之间举行挑选,包含 JavaServer Faces 、Tapestry、Shale、Grails 和 Seam (只摆列众多机警的名称中的几个).很 快,我们便可以通过 JRuby 框架在 Java 编程中利用 Ruby on Rails 了!

但就在不远的过去,只有一个 Java Web 开辟框架卓但是立.Struts 是第一 个在 Java 世界掀刮风暴的框架,并且多年以来,仿佛是假如一个项目不用 Struts 构建就没有前途一样.没有 Struts 经验的 Java 开辟人员很稀疏,也 很不幸,就像本日的开辟人员没有据说过 Ruby on Rails 一样.

即便 Struts 正渐渐地从舞台中央退去(本来的基本框架,目前叫做 Struts 1,仿佛 正在退出 Web 框架的历史舞台),但它的遗产仍旧存在,既以 Shale 的情势存 在,又以运行在世界各地的不计其数的遗留利用程序的情势存在.因为很多企业 甘愿测试和保护这些利用程序而不肯意费钱重新编写它们,所以理解 Struts 应 用程序的一些缺陷,以及若何环绕它们举行重构,是个好主张.

这个月 ,我要把以质量为核心的办法用于 Struts 利用程序的测试场景.结合实际,这 个场景环绕着最广泛的 Struts 构造:深受爱好的 Action 类.

1、2、3 ,行动!

Struts 的改革之一就是把 Web 开辟从 Servlet 移进了 Action 类.这些类包含业务逻辑,以 JavaBean 的情势(普通叫做 ActionForm )把数据传送到 JSP.然后 JSP 处理利用程序视图.Struts 到 MVC 的办法非 常简单掌握,以至于很多开辟团队鲁莽地闯进去,而很少考虑与 Action 相关的 长期计划和保护问题.

测试和复杂性

我已经发现,在开辟人员的测试和代码的复杂性之间存在激烈的相关性:没 有此中一个的地方,普通也没有另一个.高度复杂的编码难于测试,后果是很少 有人会真正为它编写测试.反过来,编写测试可以降低代码的复杂性.因为给复 杂代码编写测试更艰难,并且因为会边走边测试,所以会发现自己朝着更简单的 代码构造行进.假如代码太复杂,并且知道不得意外试它,您大概就会在测试之 前对复杂性举行重构.不管若何对待,为不那么简单的代码编写测试是清除代码 复杂性的好实践.

固然在那个时刻(过去的安闲光阴啊)大概没人想过,但 Struts Action 类 普通成为复杂性的保护所.像在老的 EJB 架构中申明狼籍的会话 Facade 一样 ,Action 类会成为特定业务历程的严峻假装,大概通过直接调用 EJB,通过打 开数据库衔接,大概通过调用其他高度依靠的对象.Action 类还有输出耦合( 通过 java.servlet API 包中的对象,比方 HttpServletRequest 和 HttpServletResponse),从而极难把它们断绝出来测试.

断绝出来测试 Action 类的艰难意味着它们可以很简单变得相当复杂 —— 分外是当它们变成越来越深化地与遗留框架耦合的时刻.目前我们来看这个艰难 在真实的遗留利用程序场景中作用的情形.

测试挑衅

即便最简单的 Struts Action 类也会是个测试挑衅.比方,以清单 1 中的 execute() 办法为例;它看起来充足简单,可以测试,但是真的么?

清单 1. 这个办法看起来简单测试……

public ActionForward execute(ActionMapping mapping,  ActionForm aForm,
  HttpServletRequest req, HttpServletResponse res) throws  Exception {
  try{

   String newPassword = ((ChangePasswordForm) aForm).getNewPassword1();
   String username = ((ChangePasswordForm)aForm).getUsername ();

   IUser user = DataAccessUtils.getDaos().getUserDao ().findUserByUsername(username);

   user.digestAndSetPassword(newPassword);
   DataAccessUtils.getDaos().getUserDao().saveUser(user);

  }catch(Throwable thr){
    return findFailure(mapping, aForm, req, res);
  }
  return findSuccess(mapping, aForm, req, res);
}

图 1. Action 类的输出耦合

但是,就像在图 1 中可以看到的,在试图断绝 ChangePasswordAction 类并 查验 execute() 办法时,该类给出了一些有代表性的挑衅.为了有效地测试 execute() 办法,必须处理三层耦合.首先,到 Struts 自身的耦合;其次, Servlet API 代表一个障碍;最后,到业务对象包的耦合,进一步查抄业务对象 包,还会有数据拜候层利用 Hibernate 和 Spring.


  以上是“<b>追求代码质量 - 测试Struts遗留的操纵程序</b>[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .