最近,认真实践了单元测试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 { @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) {// 这个地方实际上应该调用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" };} @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配置。

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

<?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

转载于:https://www.cnblogs.com/qitian1/p/6463583.html

单元测试Struts2Spring项目的Action和Service(包含源码)相关推荐

  1. HanLP自然语言处理包开源(包含源码)

    HanLP自然语言处理包开源(包含源码) 支持中文分词(N-最短路分词.CRF分词.索引分词.用户自定义词典.词性标注),命名实体识别(中国人名.音译人名.日本人名.地名.实体机构名识别),关键词提取 ...

  2. 北大青鸟java y2_北大青鸟Y2Java3个月分结业测试题 包含源码

    [实例简介] 北大青鸟Y2Java方向结业测试题,包含源码 [实例截图] [核心代码] 3道题 └── 新建文件夹 ├── 1 │   ├── 2013-1-13 6.0Y2Java 机试.rar │ ...

  3. maven 上传jar 包含源码

    2019独角兽企业重金招聘Python工程师标准>>> maven 上传jar 包含源码 1.pom配置如下 <build><plugins><!-- ...

  4. H5音乐播放器(包含源码与示例)

    H5音乐播放器(包含源码与示例) 基于Angular+ionic的H5音乐播放器,源码:https://gitee.com/CrimsonHu/h5-music-player 示例地址 建议使用原版c ...

  5. Java Web图书管理系统(MVC框架)-包含源码

    Java Web图书管理系统 一.前言 这是大二写的系统,因此这个系统并没有用到很多框架,只是使用了MVC框架,前端使用的是Layui框架.bootstrap框架.JSP技术.JSTL表达式和EL表达 ...

  6. action mutation 调用_Vuex源码学习(六)action和mutation如何被调用的(前置准备篇)...

    module与moduleCollection你一定要会啊!Vuex源码学习(五)加工后的module 在组件中使用vuex的dispatch和commit的时候,我们只要把action.mutati ...

  7. 01、JUL日志(JDK自带日志框架,包含源码分析)

    文章目录 前言 一.JUL架构介绍 1.1.认识不同组件 1.2.Logger 1.3.Handler 二.输出日志信息 三.自定义日志级别配置 3.1.认识Level类 3.2.输出不同等级日志 3 ...

  8. gdx 打包可执行 jar 不会包含源码 src 目录下的资源

    gdx 项目分为 android.core.desktop,在 core 项目的 src 目录下(包路径)有一个文件 R.template 在 package 为 xxxx.xxx.xxx.xx.he ...

  9. Spark RDD/Core 编程 API入门系列 之rdd实战(rdd基本操作实战及transformation和action流程图)(源码)(三)...

    本博文的主要内容是: 1.rdd基本操作实战 2.transformation和action流程图 3.典型的transformation和action RDD有3种操作: 1.  Trandform ...

最新文章

  1. php 对数据转换成tree,PHP 把返回的數據集轉換成Tree樹
  2. Eclipse项目部署到Tomcat中路径
  3. Dubbo 源码分析 - 自适应拓展原理
  4. jquery input值改变事件_前端技术--JQuery
  5. 机器人学习--粒子滤波及其在定位中的应用
  6. 关于css的text-indent首行缩进两个字符和图片缩进的问题
  7. 再谈SQL Server中日志的的作用
  8. 在linux下编译android下的opencv,使用cmake的方法
  9. Linux系统编程 -- exec函数族
  10. 爬虫 知识点 总结。
  11. PHP语言之表单基础
  12. mysql relay log 修改_MySQL relaylog + SQL_Thread 增量恢复binlog
  13. 【教程】如何批量获取图片信息,尺寸、大小、路径、文件名,然后导出表格或者txt的文本,下面教你使用方法
  14. 自从学会:用Python爬取虎牙颜值区美女主播照片后,身体一天不如一天
  15. python构建一个计算列表中位数的函数_python学习之数据科学库
  16. PHP编程54条必知
  17. 如何通过限制 IP 相关信息 | 控制用户访问站点频率
  18. MBA案例分析(管理之道在于“借力”三)
  19. Python爬虫-DAY5淘宝页面爬取
  20. 【小程序】投票抽奖助手多开版本4.5.31 投票详情页面的奖品优化

热门文章

  1. python中print怎么用_python的print怎么用
  2. wps 模拟分析 规划求解_【网友来稿】利用Excel求解线性规划问题
  3. linux tcp在传输数据的时候断网了_选择最合适的协议 让传输数据更灵敏
  4. mysql数据库 on 命令_MySql 数据库基础命令
  5. java sql变更跟踪_如何使用Spring动态跟踪数据库更改?
  6. java 三维数组长方体求体积_已知任意一个四面体的六条棱长,如何求出其体积?...
  7. 园林计算机制图在计算机上的应用,浅谈计算机园林效果图在园林景观设计中的运用...
  8. 北京昌平计算机职业高中学校,北京职业学校2021中专
  9. 一口气搞懂「链表」,就靠这20+张图了
  10. c primer plus 第6版 中文版pdf_内功实力再精进 试驾上汽大通V80 PLUS城市版_搜狐汽车...