qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          單元測試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);
          }
          }


          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);
          }
          }


          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>

          posted on 2013-11-14 10:38 順其自然EVO 閱讀(2883) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄

          <2013年11月>
          272829303112
          3456789
          10111213141516
          17181920212223
          24252627282930
          1234567

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 鸡东县| 廉江市| 磐安县| 乌恰县| 郁南县| 北安市| 雷州市| 延川县| 资讯 | 罗田县| 肥城市| 隆林| 河津市| 吉安市| 平武县| 托克托县| 铜梁县| 苍溪县| 遂平县| 蓝田县| 镇平县| 泸定县| 秭归县| 二连浩特市| 南木林县| 南召县| 青浦区| 博白县| 开封县| 抚宁县| 五莲县| 呼图壁县| 洛阳市| 定日县| 兖州市| 达孜县| 合水县| 营口市| 永定县| 上思县| 黔南|