单元测试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。

  1. package action;   
  2.   
  3. import org.springframework.beans.factory.annotation.Autowired;  
  4. import org.springframework.stereotype.Controller;  
  5. /** 
  6.  * 一个简单的Action。 
  7.  * @author FansUnion 
  8.  * 
  9.  */  
  10. @Controller  
  11. public class UserAction {   
  12.   
  13.  @Autowired  
  14.  private UserService userService;   
  15.   
  16.  public String getName() {  
  17.   userService.getName("FansUnion");  
  18.   return "success";  
  19.  }  
  20. }   


4.新建Service。

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


5.单元测试Action。

  1. package unittest;   
  2.   
  3. import org.apache.struts2.StrutsSpringTestCase;  
  4. import org.junit.Test;   
  5.   
  6. import action.UserAction;   
  7.   
  8. import com.opensymphony.xwork2.ActionProxy;   
  9.   
  10. /** 
  11.  * 测试StrutsSpring集成的时候,需要继承StrutsSpringTestCase这个类, 
  12.  * 而单独测试Struts的时候,继承StrutsTestCase。 
  13.  * 
  14.  * @author http://blog.csdn.net/fansunion/ 
  15.  * 
  16.  */  
  17. public class ActionUnitTest extends StrutsSpringTestCase {  
  18.  // 重写父类方法,指定配置文件的名字  
  19.  protected String[] getContextLocations() {  
  20.   return new String[] { "struts.xml""applicationContext-spring.xml" };  
  21.  }   
  22.   
  23.  @Test  
  24.  public void testExecute() throws Exception {  
  25.   ActionProxy proxy = getActionProxy("/unitTest");  
  26.   UserAction test = (UserAction) proxy.getAction();  
  27.   assertNotNull(test);  
  28.   String result = proxy.execute();  
  29.   assertEquals("success", result);  
  30.  }  
  31. }   


6.单元测试Service。

  1. package unittest;   
  2.   
  3. import org.junit.AfterClass;  
  4. import org.junit.BeforeClass;  
  5. import org.springframework.mock.web.MockServletContext;  
  6. import org.springframework.web.context.WebApplicationContext;  
  7. import org.springframework.web.context.support.XmlWebApplicationContext;   
  8.   
  9. /** 
  10.  * 测试Service的基类 
  11.  * 
  12.  * @author http://blog.csdn.net/fansunion/ 
  13.  * 
  14.  */  
  15. public class JUnitTestBase {   
  16.   
  17.  public static XmlWebApplicationContext context = null;   
  18.   
  19.  public static String[] CONFIG_FILES = { "file:src/applicationContext-*.xml" };   
  20.   
  21.  public JUnitTestBase() {  
  22.   System.out.println("JUnitTestBase");  
  23.  }   
  24.   
  25.  @BeforeClass  
  26.  public static void setUp() {  
  27.   System.out.println("Test start…");   
  28.   
  29.   context = new XmlWebApplicationContext();  
  30.   context.setConfigLocations(CONFIG_FILES);   
  31.   
  32.   MockServletContext msc = new MockServletContext();  
  33.   context.setServletContext(msc);  
  34.   context.refresh();  
  35.   msc.setAttribute(  
  36.     WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,  
  37.     context);  
  38.  }   
  39.   
  40.  @AfterClass  
  41.  public static void tearUp() {  
  42.   System.out.println("Test end!");  
  43.  }   
  44.   
  45. }   
  46.   
  47. package unittest;   
  48.   
  49. import static org.junit.Assert.assertEquals;   
  50.   
  51. import org.junit.Test;   
  52.   
  53. import action.UserService;   
  54.   
  55. public class UserServiceTest extends JUnitTestBase {   
  56.   
  57.  private UserService userService;   
  58.   
  59.  public UserServiceTest() {  
  60.   userService = context.getBean(UserService.class);  
  61.  }   
  62.   
  63.  @Test  
  64.  public void test() {  
  65.   String name = "http://FansUnion.cn";  
  66.   String myName = userService.getName(name);  
  67.   assertEquals(name, myName);  
  68.  }   
  69.   
  70. }   


7.Struts2配置。

  1. <struts>   
  2.   
  3.  <!– Development Mode –>  
  4.  <constant name="struts.devMode" value="true" />  
  5.  <constant name="struts.enable.DynamicMethodInvocation" value="false" />  
  6.  <constant name="struts.objectFactory" value="spring" />  
  7.  <constant name="struts.objectFactory.spring.autoWire" value="name" />   
  8.   
  9.  <package name="manager" namespace="/" extends="struts-default">   
  10.   
  11.   <action name="unitTest" class="userAction" method="getName">  
  12.    <result name="success">unitTest.jsp  
  13.    </result>  
  14.   </action>   
  15.   
  16.  </package>  
  17. </struts>   


8.Spring配置。

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

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.  xmlns:flex="http://www.springframework.org/schema/flex" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.  xmlns:context="http://www.springframework.org/schema/context"  
  5.  xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"  
  6.  xsi:schemaLocation="   
  7.         http://www.springframework.org/schema/beans   
  8.         http://www.springframework.org/schema/beans/spring-beans-2.5.xsd       
  9.         http://www.springframework.org/schema/tx    
  10.         http://www.springframework.org/schema/tx/spring-tx-3.0.xsd   
  11.         http://www.springframework.org/schema/aop    
  12.         http://www.springframework.org/schema/aop/spring-aop-3.0.xsd   
  13.         http://www.springframework.org/schema/context   
  14.         http://www.springframework.org/schema/context/spring-context-3.0.xsd   
  15.          http://www.springframework.org/schema/flex   
  16.        classpath:/spring-flex-1.0.xsd  
  17.     ">   
  18.   
  19.  <context:annotation-config />  
  20.  <context:component-scan base-package="*" />  
  21.  <aop:aspectj-autoproxy />  
  22. </beans>   
  23.   
  24.     


9.web.xml配置。

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app id="WebApp_ID" version="2.4"  
  3.  xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">   
  5.   
  6.  <!– Spring Context –>  
  7.  <context-param>  
  8.   <param-name>contextConfigLocation</param-name>  
  9.   <param-value>classpath:/applicationContext*.xml</param-value>  
  10.  </context-param>   
  11.   
  12.  <!– Spring Context Listener –>  
  13.  <listener>  
  14.   <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  15.  </listener>   
  16.   
  17.  <filter>  
  18.   <filter-name>struts2</filter-name>  
  19.   <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
  20.  </filter>   
  21.   
  22.   
  23.  <filter-mapping>  
  24.   <filter-name>struts2</filter-name>  
  25.   <url-pattern>*.action</url-pattern>  
  26.  </filter-mapping>   
  27.   
  28.   
  29. </web-app>   


10.源码下载。

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

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值