|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
再说第三点:我并没有提到服务器也要整合,然后是IDE,一个好的IDE能够200%提高开发的速度,就说图形方面:你是经过简单托拽和点击就能实现功能好那。
基于Java™的Web开辟范畴比来呈现了丰厚的合作性手艺。启动新项目标开辟职员能够在很多分歧的框架之间举行选择,包含JavaServerFaces、Tapestry、Shale、Grails和Seam(只枚举浩瀚机敏的称号中的几个)。很快,我们就能够经由过程JRuby框架在Java编程中利用RubyonRails了!
但就在不远的已往,只要一个JavaWeb开辟框架卓但是立。Struts是第一个在Java天下掀刮风暴的框架,并且多年以来,仿佛是假如一个项目不必Struts构建就没有出路一样。没有Struts履历的Java开辟职员很希少,也很不幸,就像明天的开辟职员没有传闻过RubyonRails一样。
即便Struts正渐渐地从舞台中心退往(本来的基础框架,如今叫做Struts1,仿佛正在加入Web框架的汗青舞台),但它的遗产仍旧存在,既以Shale的情势存在,又以运转活着界各地的不计其数的遗留使用程序的情势存在。由于很多企业宁肯测试和保护这些使用程序而不肯意费钱从头编写它们,以是了解Struts应用程序的一些缺点,和怎样环绕它们举行重构,是个好主张。
这个月,我要把以质量为中心的办法用于Struts使用程序的测试场景。分离实际,这个场景环绕着最广泛的Struts机关:深受喜好的Action类。
1、2、3,举动!
Struts的刷新之一就是把Web开辟从Servlet移进了Action类。这些类包括营业逻辑,以JavaBean的情势(一般叫做ActionForm)把数据传送到JSP。然后JSP处置使用程序视图。Struts到MVC的办法非常简单把握,以致于很多开辟团队莽撞地闯出来,而很少思索与Action相干的临时计划和保护成绩。
测试和庞大性
我已发明,在开辟职员的测试和代码的庞大性之间存在激烈的相干性:没有个中一个的中央,一般也没有另外一个。高度庞大的编码难于测试,了局是很少有人会真正为它编写测试。反过去,编写测试能够下降代码的庞大性。由于给复杂代码编写测试更坚苦,并且由于会边走边测试,以是会发明本人朝着更复杂的代码机关行进。假如代码太庞大,并且晓得不能不测试它,您大概就会在测试之前对庞大性举行重构。不管怎样对待,为不那末复杂的代码编写测试是没落代码庞大性的好理论。
固然在谁人时分(已往的自在光阴啊)大概没人想过,但StrutsAction类一般成为庞大性的回护所。像在老的EJB架构中申明缭乱的会话Facade一样,Action类会成为特定营业历程的严厉假装,大概经由过程间接挪用EJB,经由过程打开数据库毗连,大概经由过程挪用其他高度依附的对象。Action类另有输入耦合(经由过程java.servletAPI包中的对象,比方HttpServletRequest和HttpServletResponse),从而极难把它们断绝出来测试。
断绝出来测试Action类的坚苦意味着它们能够很简单变得相称庞大——出格是当它们酿成愈来愈深切地与遗留框架耦合的时分。如今我们来看这个坚苦在实在的遗留使用程序场景中感化的情形。
测试应战
即便最复杂的StrutsAction类也会是个测试应战。比方,以清单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);
}
.Action类的输入耦合
<br>
可是,就像在中能够看到的,在试图断绝ChangePasswordAction类并查验execute()办法时,该类给出了一些有代表性的应战。为了无效地测试execute()办法,必需处置三层耦合。起首,到Struts本身的耦合;其次,ServletAPI代表一个停滞;最初,到营业对象包的耦合,进一步反省营业对象包,还会无数据会见层利用Hibernate和Spring。
<p>
认真的记,感觉很紧张根本就没有时间和能力,来对技术知识点进行思考。这样课下就只能对知识进行简单的理解,其实简单的理解就是记忆课堂上讲的知识点, |
|