最近,認(rèn)真實(shí)踐了單元測試Struts2、Spring等Java項(xiàng)目,今天特意寫的是單元測試Struts2Spring項(xiàng)目的Action和Service。
由于已經(jīng)寫過不少Web開發(fā)框架單元測試的代碼,加上上次從頭搭建環(huán)境并發(fā)表了"單元測試Struts2的Action(包含源碼) ",沒有遇到太多問題。
特別說明:本文是原創(chuàng),搭建環(huán)境、寫代碼、運(yùn)行,都是實(shí)踐并且正確的。
本文是靠譜的,而非簡單的復(fù)制-粘貼。
1.特別說明。
? http://blog.csdn.net/fansunion/article/details/12118043? 單元測試Struts2的Action(包含源碼)
? 這篇文章主要講述的是如何 使用JUnit等單元測試框架測試 Struts2這一個(gè)框架的Action。
? 而本篇側(cè)重Struts2和Spring這2個(gè)框架集成的情況。
? 更多框架集成的單元測試Demo文章,請關(guān)注本博客后續(xù) 單元測試相關(guān)文章。
2.新建工程,加入相關(guān)jar包。
? Struts相關(guān)jar包
? Spring相關(guān)jar包
? JUnit, spring-test-3.2.3.RELEASE.jar,struts2-junit-plugin-2.2.3.1.jar等測試相關(guān)jar包
? Tomcat的Servlet/JSP jar包
3.新建Action。
package action; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
/*** 一個(gè)簡單的Action。* @author FansUnion**/
@Controller
public class UserAction { @Autowiredprivate 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) {// 這個(gè)地方實(shí)際上應(yīng)該調(diào)用Dao持久層的代碼,在此簡化了。// 本文只是單元測試Struts2Spring整合中,Struts的Action和Spring注入的Service。// Struts2Spring+Hibernate/Mybatis將在后續(xù)篇章中介紹。return name;} }
5.單元測試Action。
package unittest; import org.apache.struts2.StrutsSpringTestCase;
import org.junit.Test; import action.UserAction; import com.opensymphony.xwork2.ActionProxy; /*** 測試StrutsSpring集成的時(shí)候,需要繼承StrutsSpringTestCase這個(gè)類,* 而單獨(dú)測試Struts的時(shí)候,繼承StrutsTestCase。** @author http://blog.csdn.net/fansunion/**/
public class ActionUnitTest extends StrutsSpringTestCase {// 重寫父類方法,指定配置文件的名字protected String[] getContextLocations() {return new String[] { "struts.xml", "applicationContext-spring.xml" };} @Testpublic 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");} @BeforeClasspublic 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);} @AfterClasspublic 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);} @Testpublic 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配置。
(由于是從我的就項(xiàng)目復(fù)制類的,很多配置都可以去掉,由讀者自己完成)
<?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。我抽空答復(fù)。
原文參見:http://FansUnion.cn/articles/2550
轉(zhuǎn)載于:https://www.cnblogs.com/qitian1/p/6463583.html
總結(jié)
以上是生活随笔為你收集整理的单元测试Struts2Spring项目的Action和Service(包含源码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。