zoukankan      html  css  js  c++  java
  • 单元测试Struts2Spring项目的Action和Service(包含源码)

    最近,认真实践了单元测试Struts2、Spring等Java项目,今天特意写的是单元测试Struts2Spring项目的Action和Service。

    由于已经写过不少Web开发框架单元测试的代码,加上上次从头搭建环境并发表了"单元测试Struts2的Action(包含源码) ",没有遇到太多问题。

    特别说明:本文是原创,搭建环境、写代码、运行,都是实践并且正确的。

    本文是靠谱的,而非简单的复制-粘贴。

    1.特别说明。

      http://blog.csdn.net/fansunion/article/details/12118043  单元测试Struts2的Action(包含源码)

      这篇文章主要讲述的是如何 使用JUnit等单元测试框架测试 Struts2这一个框架的Action。

      而本篇侧重Struts2和Spring这2个框架集成的情况。

      更多框架集成的单元测试Demo文章,请关注本博客后续 单元测试相关文章。

    2.新建工程,加入相关jar包。

      Struts相关jar包

      Spring相关jar包

      JUnit, spring-test-3.2.3.RELEASE.jar,struts2-junit-plugin-2.2.3.1.jar等测试相关jar包

      Tomcat的Servlet/JSP jar包

    3.新建Action。

    package action; 
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    /**
     * 一个简单的Action。
     * @author FansUnion
     *
     */
    @Controller
    public class UserAction { 
    
     @Autowired
     private UserService userService; 
    
     public String getName() {
      userService.getName("FansUnion");
      return "success";
     }
    } 
    
    


    4.新建Service。

    package action; 
    
    import org.springframework.stereotype.Service; 
    
    @Service
    public class UserService { 
    
     /**
      * 简单的返回用户名
      */
     public String getName(String name) {
      // 这个地方实际上应该调用Dao持久层的代码,在此简化了。
      // 本文只是单元测试Struts2Spring整合中,Struts的Action和Spring注入的Service。
      // Struts2Spring+Hibernate/Mybatis将在后续篇章中介绍。
      return name;
     } 
    
    } 
    
    


    5.单元测试Action。

    package unittest; 
    
    import org.apache.struts2.StrutsSpringTestCase;
    import org.junit.Test; 
    
    import action.UserAction; 
    
    import com.opensymphony.xwork2.ActionProxy; 
    
    /**
     * 测试StrutsSpring集成的时候,需要继承StrutsSpringTestCase这个类,
     * 而单独测试Struts的时候,继承StrutsTestCase。
     *
     * @author http://blog.csdn.net/fansunion/
     *
     */
    public class ActionUnitTest extends StrutsSpringTestCase {
     // 重写父类方法,指定配置文件的名字
     protected String[] getContextLocations() {
      return new String[] { "struts.xml", "applicationContext-spring.xml" };
     } 
    
     @Test
     public void testExecute() throws Exception {
      ActionProxy proxy = getActionProxy("/unitTest");
      UserAction test = (UserAction) proxy.getAction();
      assertNotNull(test);
      String result = proxy.execute();
      assertEquals("success", result);
     }
    } 
    
    


    6.单元测试Service。

    package unittest; 
    
    import org.junit.AfterClass;
    import org.junit.BeforeClass;
    import org.springframework.mock.web.MockServletContext;
    import org.springframework.web.context.WebApplicationContext;
    import org.springframework.web.context.support.XmlWebApplicationContext; 
    
    /**
     * 测试Service的基类
     *
     * @author http://blog.csdn.net/fansunion/
     *
     */
    public class JUnitTestBase { 
    
     public static XmlWebApplicationContext context = null; 
    
     public static String[] CONFIG_FILES = { "file:src/applicationContext-*.xml" }; 
    
     public JUnitTestBase() {
      System.out.println("JUnitTestBase");
     } 
    
     @BeforeClass
     public static void setUp() {
      System.out.println("Test start…"); 
    
      context = new XmlWebApplicationContext();
      context.setConfigLocations(CONFIG_FILES); 
    
      MockServletContext msc = new MockServletContext();
      context.setServletContext(msc);
      context.refresh();
      msc.setAttribute(
        WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,
        context);
     } 
    
     @AfterClass
     public static void tearUp() {
      System.out.println("Test end!");
     } 
    
    } 
    
    package unittest; 
    
    import static org.junit.Assert.assertEquals; 
    
    import org.junit.Test; 
    
    import action.UserService; 
    
    public class UserServiceTest extends JUnitTestBase { 
    
     private UserService userService; 
    
     public UserServiceTest() {
      userService = context.getBean(UserService.class);
     } 
    
     @Test
     public void test() {
      String name = "http://FansUnion.cn";
      String myName = userService.getName(name);
      assertEquals(name, myName);
     } 
    
    } 
    
    


    7.Struts2配置。

    <struts> 
    
     <!– Development Mode –>
     <constant name="struts.devMode" value="true" />
     <constant name="struts.enable.DynamicMethodInvocation" value="false" />
     <constant name="struts.objectFactory" value="spring" />
     <constant name="struts.objectFactory.spring.autoWire" value="name" /> 
    
     <package name="manager" namespace="/" extends="struts-default"> 
    
      <action name="unitTest" class="userAction" method="getName">
       <result name="success">unitTest.jsp
       </result>
      </action> 
    
     </package>
    </struts> 
    
    


    8.Spring配置。

    (由于是从我的就项目复制类的,很多配置都可以去掉,由读者自己完成)

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:flex="http://www.springframework.org/schema/flex" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:context="http://www.springframework.org/schema/context"
     xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
     xsi:schemaLocation=" 
            http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd     
            http://www.springframework.org/schema/tx  
            http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
            http://www.springframework.org/schema/aop  
            http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context-3.0.xsd 
             http://www.springframework.org/schema/flex 
           classpath:/spring-flex-1.0.xsd
        "> 
    
     <context:annotation-config />
     <context:component-scan base-package="*" />
     <aop:aspectj-autoproxy />
    </beans> 
    
      
    


    9.web.xml配置。

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="WebApp_ID" version="2.4"
     xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
    
     <!– Spring Context –>
     <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:/applicationContext*.xml</param-value>
     </context-param> 
    
     <!– Spring Context Listener –>
     <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
     </listener> 
    
     <filter>
      <filter-name>struts2</filter-name>
      <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
     </filter> 
    
    
     <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>*.action</url-pattern>
     </filter-mapping> 
    
    
    </web-app> 
    
    


    10.源码下载。

    源码CSDN下载:http://download.csdn.net/detail/fansunion/6332361 (免积分)

    有问题,可以留言,或加入群或者QQ。我抽空答复。

    原文参见:http://FansUnion.cn/articles/2550

  • 相关阅读:
    According to TLD or attribute directive in tag file, attribute end does not accept any expressions
    Several ports (8080, 8009) required by Tomcat v6.0 Server at localhost are already in use.
    sql注入漏洞
    Servlet—简单的管理系统
    ServletContext与网站计数器
    VS2010+ICE3.5运行官方demo报错----std::bad_alloc
    java 使用相对路径读取文件
    shell编程 if 注意事项
    Ubuntu12.04下eclipse提示框黑色背景色的修改方法
    解决Ubuntu环境变量错误导致无法正常登录
  • 原文地址:https://www.cnblogs.com/qitian1/p/6463583.html
Copyright © 2011-2022 走看看