Email:lyx_happy@163.com
本文内容:
Junit测试Action
本文也是在上两个视频的基础进行改动,所以在看本文之前请大家先参考上两个视频。
在没有讲Junit之前,我们首先来了解一下webwork ServletDispatcher的工作原理
ServletDispatcher是默认的处理Web Http请求的调度器,是WebWork框架的控制器。相当于struts1.1的ActionServlet,同样我们也可以向Struts那样对其进行扩展,但一般情况下默认的就满足了我们的开发要求,在Struts1.2中,把大多数功能已经移植到requsetprocess中。也就是说在struts中如果想扩展控制器,我们直接继承org.apache.struts.action.RequestProcessor类就可以。如下代码:
java 代码
- public class MyRequestProcessor extends RequestProcessor {
-
- protected boolean processPreprocess(javax.servlet.http.HttpServletRequest request,
- javax.servlet.http.HttpServletResponse response) {
- try {
- request.setCharacterEncoding("GBK");
- }
- catch (UnsupportedEncodingException ex) {
- }
- System.out.println("My Request Processor is working...");
- return true;
- }
在struts中就解决了中文乱码的问题,当然要启动这个控制器,要在struts-config.xml进行配置。配置如下: <controller processorclass="com.lyx. MyRequestProcessor "></controller>.说了一大多struts的东西.回头来我们来看看webwork又是怎么执行的。
所有对Action调用的请求都将通过这个ServletDispatcher调度。它将在web.xml里配置ServletDispatcher时指定。ServletDispatcher接受客户端的HTTP请求,再传给我们的XWork框架,由我们的XWork框架去解析我们的xwork.xml配置文件,根据配置文件的信息,创建对应的Action,组装并调用相应的拦截器,执行Action。当然如果我们想进行扩展我们可以实现com.opensymphony.xwork.interceptor.Interceptor接口,有好多功能供你使用。
ServletDispatcher的主要功能调用如下:
一、init()方法在服务器启动时调用,
1、检查是否支持配置文件重新载入功能。
2、设置一些文件上传的信息,比如:上传临时目录,上传的最大字节等。都设置在webwork.properties文件里,如果在classpath中找不到这个属性文件,它会去读取默认的default.properties
当然还有更多的功能,大家可以参考webwork的帮助文档
二、service()方法,每次客户端的请求都将调用此方法。
通过request请求取得action的命名空间(namespace,与xwork.xml配置文件里package标签的name对应)
例如:我们的例子中com.lyx.web.action.LoginAction,取得的命名空间为com.lyx.web.action
在xwork.xml配置文件如下:
xml 代码
- <package name="default" extends="webwork-default">
- <action name="login" class="com.lyx.web.action.LoginAction">
- action>
- package>
这些代码大家应该很熟悉吧,就不多述了。
如果要进行单元测试还有一个是我们必须关注的extraContext。我们可以通过ActionServlet的方法或是属性得到。至于原理在这里就不多说了,大家可以参考webwork中文文档上面写的很详细。
根据前面获得的namespace、actionName、extraContext,创建一个ActonProxy。
创建代码如下:
java 代码
- ActionProxy proxy = ActionProxyFactory.getFactory().createActionProxy(
- "com.lyx.web.action", "login", extraContext);
这个ActionProxy可以读取namespace、actionName读取xwork.xml配置文件里这个Action的所有配置信。
有了namespace,actionName,extraContext,ActionProxy我们就可以完成单元测试了。
新建一个Junit类代码如下:
结合上述的文档,试试吧。
这里一定要注意junit包一定要引入。
java 代码
- import java.util.HashMap;
- import java.util.Map;
-
- import com.opensymphony.xwork.ActionContext;
- import com.opensymphony.xwork.ActionProxy;
- import com.opensymphony.xwork.ActionProxyFactory;
-
- import junit.framework.TestCase;
-
- public class LoginActionTest extends TestCase {
- @SuppressWarnings("unchecked")
- public void testExecute() throws Exception {
- Map params = new HashMap();
- params.put("user.userName", "lyx");
- params.put("user.userPwd", "lyx");
- Map extraContext = new HashMap();
- extraContext.put(ActionContext.PARAMETERS, params);
-
- ActionProxy proxy = ActionProxyFactory.getFactory().createActionProxy(
- "com.lyx.web.action", "login", extraContext);
- proxy.setExecuteResult(false);
- assertEquals(proxy.execute(), "success");
-
- LoginAction action = (LoginAction) proxy.getAction();
- assertEquals(action.getUser().getUserName(), "lyx");
- assertEquals(action.getUser().getUserPwd(), "lyx");
-
- }
-
- }
基本的代码就写完了,还有其它的没有解释,大家再回来看看。就应该可以明白了。
在建一个TestSuite测试一下吧。
java 代码
- package test.com.test;
-
- import junit.framework.Test;
- import junit.framework.TestSuite;
-
- public class AllTests {
-
- public static Test suite() {
- TestSuite suite = new TestSuite("Test for test.com.test");
-
- suite.addTestSuite(LoginActionTest.class);
-
- return suite;
- }
-
- }
运行此类,如果全是绿色,就通过了。试试看吧。
OK通过了,测试的用户名和密码都为”lyx”,改一下试试。
改了密码就对了。呵呵。
OK了。就到这里吧。
希望大家多提宝贵意见。上面有的我联系方式。
分享到:
相关推荐
JUnit in Action中文版,用于java单元测试
JunitInAction书中的源代码,便于Java开发者和测试人员使用Junit框架从代码层面进行白盒测试。
本书主要介绍在Java软件开发中使用JUnit进行测试的原则、技巧与实践,深入阐述如何编写自动测试。把一段代码隔离开来测试有什么好处,如何判断何时需进行整合测试......
介绍junit的中文版电子书,是很不错的学习测试用的资料。
Manning的in Action,是一套非常实用的书,能够帮助读者对相关技术快速上手。 这一本是JUnit in Action第二版的,由于这不是正式发售的版本,属于测试版本,因此书中可能存在一些缺陷。
主要介绍了在Java软件开发中使用JUnit进行测试的原则、技巧与实践,深入阐述如何编写自动测试,把一段代码隔离开来测试有什么好处,如何判断何时需要进行整合测试,并对如何测试完整的J2EE应用进行了极具价值的讨论...
Manning 的经典书籍《JUnit in Action》,教你如何做好JUnit测试!
JunitInAction书中的源代码,便于Java开发者和测试人员使用Junit框架从代码层面进行白盒测试。
·用mock objects进行隔离测试(★★★★★) ·用Cactus进行容器内测试 ·用Ant和Maven进行自动构建(★★★★★) ·在Eclipse内进行测试 ·对如下内容进行单元测试 ◆Java应用程序(★★) ◆Filter ◆...
详细讲解如何用junit搭建测试框架,适合初学者和希望进一步了解单元测试的人
由浅入深、由易到难地对JUnit展开了系统的讲解,包括探索JUnit的核心、软件测试原则、测试覆盖率与开发、使用stub进行粗粒度测试、使用mockobjects进行测试、容器内测试、从Ant中运行JUnit测试、从Maven2中运行JUnit...