设为首页 收藏本站
查看: 1581|回复: 0

[经验分享] Apache Struts2 文档之 JUnitPlugin

[复制链接]

尚未签到

发表于 2017-1-2 07:56:49 | 显示全部楼层 |阅读模式
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.


  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-322571-1-1.html 上篇帖子: Apache Camel框架入门示例 下篇帖子: Apache Wicket 6.2 发布
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表