Apache Struts2 文档之 JUnitPlugin

Apache Struts 2 Documentation > Home > Guides > Plugin Developers Guide > JUnit Plugin
Apache Struts2 文档之 JUnitPlugin
JUnit Plugin 提供了与流行的单元测试框架JUnit的集成
此插件提供了一个基本的StrutsTestCase类,他能用于子类化Struts2组件的测试。并用于Struts2本身的组件和很多绑定插件的测试。此插件也提供了StrutsSpringTestCase来支持用Spring作为对象工厂的 action测试
更多细节,请查看ActionTest(%struts-2.2.3.1%\docs\WW\testing-actions.html)
Struts Actions(未使用Spring)
不使用Spring来测试Actions,要继承StrutsTestCase。以下实例显示了测试Actions的两种不同方式:
  <struts>
   <constant name="struts.objectFactory" value="spring"/>
   <package name="test" namespace="/test" extends="struts-default">
   <action name="testAction" class="org.apache.struts2.TestAction">
   <result type="freemarker">/template.ftl</result>
   </action>
   </package>
  </struts>
  MyNote:
  以上代码表明 struts的对象工厂为spring,并定义了一个TestAction
  Action:
  public class TestAction extends ActionSupport {
   private String name;
   public String getName() {
   return name;
   }
   public void setName(String name) {
   this.name = name;
   }
  }
  MyNote:
  TestAction仅仅有一个name属性及其getter,setter
  JUnit:
  package org.apache.struts2;
  import org.apache.struts2.dispatcher.mapper.ActionMapping;
  import java.util.HashMap;
  import java.io.UnsupportedEncodingException;
  import com.opensymphony.xwork2.ActionProxy;
  import com.opensymphony.xwork2.Action;
  import javax.servlet.ServletException;
  public class StrutsTestCaseTest extends StrutsTestCase {//MyNote:需要继承StrutsTestCase
  /**MyNote:测试 是否存在请求的Action路径,并对命名空间及action的名字分别进行测试*/
   public void testGetActionMapping() {
   ActionMapping mapping = getActionMapping("/test/testAction.action");
   assertNotNull(mapping);
   assertEquals("/test", mapping.getNamespace());
   assertEquals("testAction", mapping.getName());
   }
  /**MyNote: 模拟带参数的某个请求,并测试其结果是否正确
  在StrutsTestCase的超类中提供了 request
  通过获得ActionProxy来注入参数
  */
   public void testGetActionProxy() throws Exception {
   //set parameters before calling getActionProxy
   request.setParameter("name", "FD");
   ActionProxy proxy = getActionProxy("/test/testAction.action");
   assertNotNull(proxy);
   TestAction action = (TestAction) proxy.getAction();
   assertNotNull(action);
   String result = proxy.execute();
   assertEquals(Action.SUCCESS, result);
   assertEquals("FD", action.getName());
   }
  /**MyNote:直接执行某个Action来判断输出*/
   public void testExecuteAction() throws ServletException, UnsupportedEncodingException {
   String output = executeAction("/test/testAction.action");
   assertEquals("Hello", output);
   }
  /**MyNote:在执行Action后测试值栈中的值*/
   public void testGetValueFromStack() throws ServletException, UnsupportedEncodingException {
   request.setParameter("name", "FD");
   executeAction("/test/testAction.action");
   String name = (String) findValueAfterExecute("name");
   assertEquals("FD", name);
   }
  }
模板:
  如果你使用JSP作为模板引擎,你将不能在容器外测试Action的输出。EmbeddedJSP Plugin(内嵌的JSP插件)可用于越过这种限制,并能在classpath(类路径)和容器外使用JSP
方法描述
  以下是StrutsTestCase中定义的工具方法和Mock'对象来简化测试。
方法名 描述
executeAction(String ) 转换action的URL,并返回action的输出。这个输出不是Action的result( 如"success"),而是并写入的结果流。要使用这个action 必须使用一个来自classpath的结果类型,如Freemarker,velicity等等,如果你使用了EmbeddedJspPlugin 你也可以使用JSP
getActionProxy(String) 构建一个ActionProxy.可通过在返回的代理对象上调用execute方法调用Action,exection方法的返回结果是action结果(如"success")
getActionMapping(String) 获得参数url的ActionMapping对象
injectStrutsDependencies (Object) 注入Struts依赖的对象
findValueAfterExecute(String) 在Action执行后,在值栈中查找一个对象
属性 描述
MockHttpServletRequest request 传给Struts的request对象。确保在调用getActionProxy这样的方法前在mock对象中设置参数
MockHttpServletResponse response 传给Struts的response对象。你可以使用这个类测试输出和响应头等
MockServletContext servletContext 传给Struts的ServletContext对象

使用Spring的StrutsAction
确保将SpringPlugin依赖加入到pom.xml中(MyNoe:如果不使用Maven,直接将插件jar拷入项目lib即可)
  <dependency>
   <groupId>org.apache.struts</groupId>
   <artifactId>struts2-spring-plugin</artifactId>
   <version>STRUTS_VERSION</version>
  </dependency>
如果你使用Spring作为对象工厂。StrutsSpringTestCase可用于编写你的单元测试。这个类继承自StrutsTestCase并有一个ApplicationContext类型的applicationContext属性。
SpringContext 默认从classpath*:applicationContext.xml进行加载。为提供一个不同的位置,请重写getContextLocations.


  
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值