<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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 閱讀(2881) 評論(0)  編輯  收藏 所屬分類: 測試學習專欄

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

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: g0g0人体全免费高清大胆视频| 亚洲欧美第一成人网站7777| 97超高清在线观看免费视频| www国产亚洲精品久久久 | 亚洲嫩草影院在线观看| 国内精品久久久久影院免费| 亚洲色大成网站WWW久久九九| 国产午夜精品理论片免费观看| 久久激情亚洲精品无码?V| 一本久久A久久免费精品不卡| 亚洲综合图色40p| a级毛片100部免费观看| 久久精品国产亚洲一区二区| 亚洲a一级免费视频| 亚洲va成无码人在线观看| 国产男女猛烈无遮挡免费视频| 国产精品久久亚洲一区二区| 亚洲AV伊人久久青青草原| 抽搐一进一出gif免费视频| 日本亚洲视频在线 | 无码中文字幕av免费放| 亚洲狠狠婷婷综合久久蜜芽| 亚洲AV伊人久久青青草原| 美女巨胸喷奶水视频www免费| 99久久精品国产亚洲| 成年午夜视频免费观看视频| 又长又大又粗又硬3p免费视频| 亚洲国产成人精品无码区在线观看| 69式互添免费视频| 香蕉视频亚洲一级| 亚洲精品美女久久久久99| 无码国产精品一区二区免费式直播| 麻豆69堂免费视频| 亚洲国产成人久久精品动漫 | 国产成人高清亚洲| 91福利免费体验区观看区| 成人区精品一区二区不卡亚洲| 在线日韩日本国产亚洲| 在线看片免费不卡人成视频| 一级做a爰片久久毛片免费陪 | 亚洲免费闲人蜜桃|