Spring与Struts结合测试的问题解答
?JDK1.6都出来好长时间了,可我现在公司开发用的还是jdk1.4,说是稳定,另外一个,公司的用户都不愿意花钱升级自己的应用服务器,所以,我们只能在JDK1.4下面开发。另外公司的架构是一个技术牛人写的,采用Struts1.2+spring2.0,前台JSP页面展示采用一套自己的验证,数据传递到后台以及持久层都是那个牛人写的,公用框架没问题,也比较好用,但是缺乏测试。
? 我针对持久层写了一些测试,但是对struts的Action层一直没有测试,从网上搜索出来的东西,大都是专门真么SPring或者专门针对Struts的,或者有针对Spring+struts的,但是就一个简单的Demo,对于路径问题,还是没有解决,总是报404或者其他的错误,最终花了好几天的时间,才搞定这个问题,特写博客记录一下,也希望能给有需要这方面东西的朋友提供个帮助。
? 其实例子就是简单的一个登录功能,登录成功后进入dwgl模块,包含两个struts的action类,一个在根目录下,一个在dwgl路径下。
web.xml主要配置如下:
?
?struts-config-dwgl.xml内容如下:
??
applicationContext.xml内容如下:
?
?LoginActionTest 类代码如下:具体注释写的很清楚,大家一看就明白,
?
?
?
?
由于dwglaction继承自 DispatchAction ,并且在dwgl模块下,所以测试类路径设置以及方法设置要复杂一点,具体代码如下:
public class DwglActionTest extends MockStrutsTestCase { public void setUp() throws Exception { super.setUp(); // 调用父类的setUp() setContextDirectory(new File("WebRoot/")); // 指定上下文目录(WEB-INF的父目录) String configfilePath = "/WEB-INF/config/struts-config.xml"; this.setConfigFile(configfilePath); //第一个参数子项目的配置文件,不能以"/"开头 this.setConfigFile("dwgl","/WEB-INF/config/struts-config-dwgl.xml"); SpringWebContextHelper.setWebApplicationContext(context); setInitParameter("validating","false"); } public void testGetMessage() { // 选择要执行哪一个Action,其中第一个参数用来标识子项目,切记必须以“/”开头 this.setRequestPathInfo("/dwgl","/dwgl.do"); this.addRequestParameter("method", "querydw"); this.actionPerform(); } public static void main(String[] args){ }}?
?
?
?
现在写完这些测试方法,感觉好简单,可当时却折磨得我好苦,花了好几天的时间才完成这些测试,当时由于一个路径设置的问题,junit的进度条就是不能变绿,等到最后完成这些测试、进度条变绿,我才舒了一口气,希望对需要的朋友有一些帮助。
附件为所有的源代码,不过由于lib文件太大,我没有进行上传,具体需要以下jar包,log4j、struts、spring、strutstest。
1 楼 zhangjunji111 2009-07-21 昨天在公司测试Struts时候,在Cactus环境下测试,结果一直报一个类型转化的错误,说一个什么类不能转化为WebApplicationcontext类,我的系统采用Spring+struts开发,其中调用了Xfire。估计是Xfire在捣鬼,不过还没有解决的办法,希望有了解的朋友帮忙解答一下了。