Junit对Action与Dao的测试总结

chenhb 贡献于2011-08-08

作者 zhouxp  创建于2011-01-06 05:50:00   修改者zhouxp  修改于2011-01-13 05:54:00字数9348

文档摘要:以下是使用Junit对Action与Dao的一点测试心得,有不对的地方欢迎批评指教。
关键词:

以下是使用Junit对Action与Dao的一点测试心得,有不对的地方欢迎批评指教。有疑问或是有什么错误的地方大家可以E我,Email:goshoppingzxp@yahoo.cn 在做白盒测试之前,对白盒是一点感觉都没有。只知道在MyEclipse中有个自带的Junit可以用来测试代码,另外就是知道几个断言。所以这次的白盒测试纯粹是边学边做的。在这过程中主要也就是到网上查的资料做的。别人怎么做的就跟着后面学了点。还是有许多不足之处的。 通过网上的资料,我知道可以对Action进行测试,而且在我们准备进行测试的模块待办公文在Action中的逻辑是比较复杂的,我想测试看看Action中逻辑是否正确,所以有了这对Action的测试。在开始测试前首先就是单元测试环境的搭建。我们这边的是Myeclipse6.0,SSH三层框架的,用的是Struts2,除了开发时需要的一般包,还需要导入的包有:junit4.4jar、struts2-junit-plugin-2.1.8.jar、spring-test.jar,如果使用Cactus的话,还需要将jakarta-cactus-12-1.5-beta1下的lib下的所有包导入,以及httpunit.jar可能还有相关的包,具体情况具体分析。在此处就不说了。 因为该项目是使用的SSH三层框架的模式,所以在开始前我们同样需要对Spring与Hibernate的配置文件进行加载。Spring的配置文件我们放在Web-Info下面,而不是ClassPath下面,所以要得到Spring的配置文件,这是遇到的第一个难点。好几个人在测试过程中都继承过MockStrutsTestCase这个类,我也试过这个,可是结果都是报错,java.lang.NoClassDefFoundError:org/apache/struts/action/ActionServlet,刚开始我以为是哪边没有配置好,浪费的很多时间,后来在网上搜到资料说MockStrutsTestCase是对应Struts1.x ,而我们这边用的Struts2.x,这是不可用的,所以再次查资料才知道测试Struts2.x的类是StrutsSpringTestCase,对应的包是struts2-junit-plugin-2.1.8.jar,所以从网上下了这个包试了一下,发现可以用,具体实现类如下: package com.Shopping.service; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; import junit.framework.TestCase; public class BaseActionTest extends TestCase { private ApplicationContext context = null; protected void setUp() throws Exception { super.setUp(); context = new FileSystemXmlApplicationContext( new String[]{"WebRoot/WEB-INF/applicationContext-dao.xml","WebRoot/WEB-INF/applicationContext-resources.xml","WebRoot/WEB-INF/applicationContext-service.xml","WebRoot/WEB-INF/applicationContext-struts.xml"}); } public ApplicationContext getApplicationContext() { return context; } } 一般来说这样写也是可以的,但是白盒测试方法一般是在开发之前就开始的,所以那时并不知道到底有几个配置文件,这个方法不是通用的,所以可以写个方法,从Web-Info下面得到所有以application开头的文件,这样就不需要修改类了。 package com.Shopping.TestTo; import java.io.File; import java.io.FilenameFilter; import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLDecoder; import org.apache.struts2.StrutsSpringTestCase; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; import org.springframework.test.context.support.GenericXmlContextLoader; import org.springframework.web.context.WebApplicationContext; public class SpringBeanFactoryMock extends StrutsSpringTestCase { private ApplicationContext context = null; @Override public void setUp() throws Exception { super.setUp(); } @Override protected void setupBeforeInitDispatcher() throws Exception { GenericXmlContextLoader xmlContextLoader = new GenericXmlContextLoader(); applicationContext = xmlContextLoader.loadContext(getContextLocation()); servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, applicationContext); } public String[] getContextLocation(){ URL classUrl = SpringBeanFactoryMock.class.getResource(""); String path = classUrl.getPath(); try { path = URLDecoder.decode(path, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } path = path.substring(1 , path.indexOf("WEB-INF"))+ "WEB-INF/"; File configPath = new File(path); String[] applicationContexts = configPath.list(new FilenameFilter(){ public boolean accept(File dir, String name){ if(name.toLowerCase().startsWith("applicationcontext")){ return true; } return false; } }); for(int i=0;i ServletRedirector org.apache.cactus.server.ServletTestRedirector ServletTestRunner org.apache.cactus.server.runner.ServletTestRunner JspRedirector /jspRedirector.jsp ServletRedirector /ServletRedirector ServletTestRunner /ServletTestRunner JspRedirector /JspRedirector 如果只是单纯的这样加上去的话,又会出现错误的,会提示说找不到ServletTestRunner这个Action,但是ServletTestRunner并不是Action,这里主要是因为对Struts2的应用范围是/*,所以我们这里需要把Struts2的应用范围进行修改,让它只应用到jsp页面, 修改为 Struts2 /WebRoot/* 即可,就是加上具体的文件名。同时在Jsp页面的Action映射也是需要加上的,具体加哪些自己可以先试试,到时哪边链接不过去,就修改哪边。这样算是整体总结结束了。

下载文档到电脑,查找使用更方便

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 5 金币 [ 分享文档获得金币 ] 7 人已下载

下载文档