- 浏览: 2262757 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (423)
- FileNet相关 (3)
- 应用服务器相关 (22)
- Java综合 (77)
- 持久层 (24)
- struts (11)
- webservice (8)
- 虚拟机 (2)
- 光盘刻录 (0)
- AD及AD集群 (1)
- JS (33)
- F5 (0)
- loadrunner8.1 (0)
- Java 反编译工具 (2)
- DataBase (62)
- ant (1)
- 操作系统 (29)
- 我的任务 (3)
- 平台架构 (16)
- 业务规则引擎 (2)
- 模板 (1)
- EJB (5)
- spring (24)
- CMMI (1)
- 项目管理 (20)
- LDAP (13)
- JMS (10)
- JSP (19)
- JBPM (2)
- web MVC框架设计思想 (2)
- 第三方支付平台 (2)
- BUG管理工具 (1)
- 垃圾站 (2)
- php (1)
- swing (1)
- 书籍 (1)
- QQ qq (2)
- 移动互联网 (26)
- 爱听的歌曲 (0)
- hadoop (4)
- 数据库 (9)
- 设计模式 (1)
- 面试经验只谈 (1)
- 大数据 (9)
- sp (1)
- 缓存数据库 (8)
- storm (2)
- taobao (2)
- 分布式,高并发,大型互联网,负载均衡 (6)
- Apache Ignite (0)
- Docker & K8S (0)
最新评论
-
wangyudong:
新版本 Wisdom RESTClienthttps://gi ...
spring rest mvc使用RestTemplate调用 -
wangyudong:
很多API doc生成工具生成API文档需要引入第三方依赖,重 ...
spring rest mvc使用RestTemplate调用 -
zhaoshijie:
cfying 写道大侠,还是加载了两次,怎么解决啊?求。QQ: ...
spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件) -
xinglianxlxl:
对我有用,非常感谢
spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件) -
k_caesar:
多谢,学习了
利用maven的resources、filter和profile实现不同环境使用不同配置文件
关键字:Spring MVC 单元测试
下面一步一步带领大家实现spring MVC 单元测试:
新建一个基类:
package test;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.junit.BeforeClass;
import org.springframework.mock.web.MockServletContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.XmlWebApplicationContext;
import org.springframework.web.servlet.HandlerAdapter;
import org.springframework.web.servlet.HandlerExecutionChain;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter;
import org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping;
public class JUnitActionBase {
private static HandlerMapping handlerMapping;
private static HandlerAdapter handlerAdapter;
/**
* 读取spring3 MVC配置文件
*/
@BeforeClass
public static void setUp() {
if (handlerMapping == null) {
String[] configs = { "classpath*:spring/*/*.xml","classpath*:applicationContext.xml","classpath:springMvc-servlet.xml"};
XmlWebApplicationContext context = new XmlWebApplicationContext();
context.setConfigLocations(configs);
MockServletContext msc = new MockServletContext();
context.setServletContext(msc);
context.refresh();
msc.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, context);
handlerMapping = (HandlerMapping) context
.getBean(DefaultAnnotationHandlerMapping.class);
handlerAdapter = (HandlerAdapter) context.getBean(context.getBeanNamesForType(AnnotationMethodHandlerAdapter.class)[0]);
}
}
/**
* 执行request对象请求的action
*
* @param request
* @param response
* @return
* @throws Exception
*/
public ModelAndView excuteAction(HttpServletRequest request, HttpServletResponse response)
throws Exception {
HandlerExecutionChain chain = handlerMapping.getHandler(request);
// 这里需要声明request的实际类型,否则会报错
request.setAttribute(HandlerMapping.INTROSPECT_TYPE_LEVEL_MAPPING, true);
final ModelAndView model = handlerAdapter.handle(request, response,chain.getHandler());
return model;
}
/**
* 执行request对象请求的action(针对没有返回值的action方法)
*
* @param request
* @param response
* @return
* @throws Exception
*/
public void excuteActionWithJson(HttpServletRequest request, HttpServletResponse response)
throws Exception {
HandlerExecutionChain chain = handlerMapping.getHandler(request);
// 这里需要声明request的实际类型,否则会报错
request.setAttribute(HandlerMapping.INTROSPECT_TYPE_LEVEL_MAPPING, true);
handlerAdapter.handle(request, response,chain.getHandler());
}
}
定义测试controller类
package test;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
public class HelloActionTest extends JUnitActionBase {
/**
* 每个方法执行前
* @throws Exception
*/
@Before
public void before() throws Exception{
System.out.println("方法执行前...........");
}
/**
* 每个方法执行后
* @throws Exception
*/
@After
public void after() throws Exception{
System.out.println("方法执行后...........");
}
@Test
public void testAdd() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletResponse response = new MockHttpServletResponse();
// request.setLocalPort(8080);
request.setRequestURI("/w/postmodel");
request.addParameter("id", "1002");
//request.addParameter("date", "2010-12-30");
request.setMethod("GET");
// 执行URI对应的action
final ModelAndView mav = this.excuteAction(request, response);
// Assert logic
Assert.assertEquals("views/demo/postmodel", mav.getViewName());
// String msg=(String)response.getAttribute("message");
Object msg=mav.getModel().get("param");
System.out.println(msg);
}
@Test
public void testGet() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletResponse response = new MockHttpServletResponse();
request.setLocalPort(8080);//该选项可不设置
// request.setServletPath("/strategy/page");//另一种设置url的方式
request.setRequestURI("/strategy/page");
request.addParameter("pageNo", "2");
request.addParameter("pagesize", "20");
request.setMethod("GET");
request.setAttribute("msg", "测试action成功");
// 执行URI对应的action
final ModelAndView mav = this.excuteAction(request, response);
// Assert logic
Assert.assertEquals("views/strategy/page", mav.getViewName());
// String msg=(String)response.getAttribute("message");
Object msg=mav.getModel().get("param");
System.out.println(msg);
String msg2=(String)request.getAttribute("msg");
System.out.println(msg2);
}
}
说明:这里不再定义具体的控制层,你自己的写的控制类通过在测试类里面设置访问uri和相关参数即可
点击》run as或debug as》juint测试
补充说明:
需要测试dao层时,若是dao层包nullpointException,有可能是你的数据库连接datasource使用代理或是其他,则需要重新在spring的配置文件配置bean id=datasource,
下面一步一步带领大家实现spring MVC 单元测试:
新建一个基类:
package test;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.junit.BeforeClass;
import org.springframework.mock.web.MockServletContext;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.XmlWebApplicationContext;
import org.springframework.web.servlet.HandlerAdapter;
import org.springframework.web.servlet.HandlerExecutionChain;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter;
import org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping;
public class JUnitActionBase {
private static HandlerMapping handlerMapping;
private static HandlerAdapter handlerAdapter;
/**
* 读取spring3 MVC配置文件
*/
@BeforeClass
public static void setUp() {
if (handlerMapping == null) {
String[] configs = { "classpath*:spring/*/*.xml","classpath*:applicationContext.xml","classpath:springMvc-servlet.xml"};
XmlWebApplicationContext context = new XmlWebApplicationContext();
context.setConfigLocations(configs);
MockServletContext msc = new MockServletContext();
context.setServletContext(msc);
context.refresh();
msc.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, context);
handlerMapping = (HandlerMapping) context
.getBean(DefaultAnnotationHandlerMapping.class);
handlerAdapter = (HandlerAdapter) context.getBean(context.getBeanNamesForType(AnnotationMethodHandlerAdapter.class)[0]);
}
}
/**
* 执行request对象请求的action
*
* @param request
* @param response
* @return
* @throws Exception
*/
public ModelAndView excuteAction(HttpServletRequest request, HttpServletResponse response)
throws Exception {
HandlerExecutionChain chain = handlerMapping.getHandler(request);
// 这里需要声明request的实际类型,否则会报错
request.setAttribute(HandlerMapping.INTROSPECT_TYPE_LEVEL_MAPPING, true);
final ModelAndView model = handlerAdapter.handle(request, response,chain.getHandler());
return model;
}
/**
* 执行request对象请求的action(针对没有返回值的action方法)
*
* @param request
* @param response
* @return
* @throws Exception
*/
public void excuteActionWithJson(HttpServletRequest request, HttpServletResponse response)
throws Exception {
HandlerExecutionChain chain = handlerMapping.getHandler(request);
// 这里需要声明request的实际类型,否则会报错
request.setAttribute(HandlerMapping.INTROSPECT_TYPE_LEVEL_MAPPING, true);
handlerAdapter.handle(request, response,chain.getHandler());
}
}
定义测试controller类
package test;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
public class HelloActionTest extends JUnitActionBase {
/**
* 每个方法执行前
* @throws Exception
*/
@Before
public void before() throws Exception{
System.out.println("方法执行前...........");
}
/**
* 每个方法执行后
* @throws Exception
*/
@After
public void after() throws Exception{
System.out.println("方法执行后...........");
}
@Test
public void testAdd() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletResponse response = new MockHttpServletResponse();
// request.setLocalPort(8080);
request.setRequestURI("/w/postmodel");
request.addParameter("id", "1002");
//request.addParameter("date", "2010-12-30");
request.setMethod("GET");
// 执行URI对应的action
final ModelAndView mav = this.excuteAction(request, response);
// Assert logic
Assert.assertEquals("views/demo/postmodel", mav.getViewName());
// String msg=(String)response.getAttribute("message");
Object msg=mav.getModel().get("param");
System.out.println(msg);
}
@Test
public void testGet() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
MockHttpServletResponse response = new MockHttpServletResponse();
request.setLocalPort(8080);//该选项可不设置
// request.setServletPath("/strategy/page");//另一种设置url的方式
request.setRequestURI("/strategy/page");
request.addParameter("pageNo", "2");
request.addParameter("pagesize", "20");
request.setMethod("GET");
request.setAttribute("msg", "测试action成功");
// 执行URI对应的action
final ModelAndView mav = this.excuteAction(request, response);
// Assert logic
Assert.assertEquals("views/strategy/page", mav.getViewName());
// String msg=(String)response.getAttribute("message");
Object msg=mav.getModel().get("param");
System.out.println(msg);
String msg2=(String)request.getAttribute("msg");
System.out.println(msg2);
}
}
说明:这里不再定义具体的控制层,你自己的写的控制类通过在测试类里面设置访问uri和相关参数即可
点击》run as或debug as》juint测试
补充说明:
需要测试dao层时,若是dao层包nullpointException,有可能是你的数据库连接datasource使用代理或是其他,则需要重新在spring的配置文件配置bean id=datasource,
- Spring_mvc_Junit.rar (4.3 KB)
- 下载次数: 6
- spring-mock.jar (97 KB)
- 下载次数: 0
- unitls-3.3.zip (1.3 MB)
- 下载次数: 3
发表评论
-
Dubbo Main启动方式浅析
2015-05-27 13:54 15456关键字:Dubbo Main启动方式浅析 服务容器是一个s ... -
spring中的数据源配置信息加密方案
2014-10-22 10:36 1078关键字:spring中的数据源配置信息加密方案 附件是完整的 ... -
基于Spring可扩展Schema提供自定义配置支持
2014-07-21 18:38 1010关键字:基于Spring可扩展Schema提供自定义配置支持 ... -
spring 自定义注解实现(MVC层)
2014-07-21 17:32 868关键字:spring 自定义注解实现(MVC层) 前言 在 ... -
优化程序之前,可用Jamon来监测你的Spring应用
2013-11-28 23:52 2059关键字:优化程序之前,可用Jamon来监测你的Spring应 ... -
spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件)
2013-11-14 14:01 77284关键字:spring容器加载完毕做一件事情(利用Context ... -
Java MVC框架性能比较 jsp、struts1、struts2、springmvc3
2013-10-30 17:41 2287关键字:Java MVC框架性能比较 jsp、struts1 ... -
spring JTA集成JOTM或Atomikos配置分布式事务(Tomcat应用服务器)
2013-03-26 15:07 9200关键字:spring JTA集成JOTM或Atomikos配置 ... -
mongodb spring支持
2012-12-17 10:11 1028关键字:mongodb spring支持 相关链接: ... -
spring aop实现日志功能
2012-11-22 14:48 3363关键字 :sping aop实现日志功能 附件是spin ... -
Spring + CXF + 注解方式(webService)
2012-11-02 11:34 6776关键字:Spring + CXF + 注解方式(webS ... -
Spring + Xfire + 注解方式
2012-11-01 15:08 1257关键字:Spring 与集成 Xfire 注解方式( Spr ... -
spring rest mvc使用RestTemplate调用
2012-11-01 12:25 70415关键字:RestTemplate使用 可参考博客: ... -
java面向切面编程
2011-09-24 15:37 2367关键字:java面向切面编程 原理简述:java面向切面编 ... -
SpringMVC添加支持Http的delete、put请求
2011-06-02 23:28 3412浏览器form表单只支持GET与POST请求,而DEL ... -
springMVC有关RESTfull
2011-06-02 22:58 5332关键字:springMVC有关RESTfull Sp ... -
spring文件上传(3.0)
2011-06-02 22:44 2961关键字:Spring CommonsMultipartReso ... -
spring3.0多文件上传例子
2011-06-02 22:43 6676关键字:spring3.0多文件 ... -
spring3.0 mvc rest 注解之@
2011-05-16 22:17 3551关键字:spring mvc rest 注解之@ 本文转自h ... -
spring3.0 mvc和rest入门例子
2011-05-07 19:22 2872关键字:spring3.0 mvc和rest入门例子 现在 ...
相关推荐
Spring MVC 是一个强大的Java web开发框架,用于构建可维护、可扩展的...总之,通过正确使用JUnit、Mockito、Spring Test以及MockMVC,我们可以编写出全面、有效的Spring MVC单元测试,确保代码质量并降低潜在的bug。
本书共计10章,分别介绍了快速搭建Spring Web应用、精通MVC结构、URL映射、文件上传与错误处理、创建Restful应用、保护应用、单元测试与验收测试、优化请求、将Web应用部署到云等内容,循序渐进地讲解了Spring MVC4...
在Spring MVC和JPA的开发过程中,单元测试是不可或缺的一部分,它可以帮助我们验证代码的正确性,确保系统各个部分能够按预期工作。本例子聚焦于使用Spring的Test注解进行事务管理的单元测试,这对于数据库操作尤其...
在Spring MVC框架中,单元测试是确保代码质量的重要步骤,特别是在控制器层(Controller)。这篇博客主要探讨了如何使用JUnit进行Spring MVC Controller的单元测试。在实际开发中,单元测试可以帮助我们尽早发现潜在...
Spring MVC提供了MockMVC,可以在不依赖服务器的情况下进行单元测试和集成测试。 这个"最全最经典spring-mvc教程"应该会详细讲解上述所有概念,并可能通过实例演示如何配置、创建和调试Spring MVC项目。对于想要...
十三、如何给Spring3 MVC中的Action做JUnit单元测试:说明了如何对Spring MVC中的控制器进行单元测试,包括配置测试环境和编写测试代码。 十四、Spring MVC转发与重定向:详细讲解了在Spring MVC中如何使用转发和...
#### 七、Spring MVC 单元测试 - **JUnit 测试**:使用 JUnit 和 Mockito 等工具进行单元测试。 - **Mockito**:模拟 Controller 依赖的对象,以确保测试只关注 Controller 的逻辑。 #### 八、Spring MVC 前后端...
在"spring mvc 单元测试 - 记记更好 - 51CTO技术博客.mht"这篇文章中,可能详细介绍了如何设置和使用`MockMvc`进行单元测试,包括配置测试环境、编写测试用例以及断言结果等步骤。 在实际开发中,GuoLong(可能是指...
而JUnit作为Java领域最常用的单元测试框架,可以帮助开发者确保代码的质量和功能的正确性。本测试着重关注Spring MVC架构中的三层:表现层(Presentation Layer)、业务层(Business Logic Layer)和服务数据访问层...
JUnit作为Java领域最流行的单元测试框架,与Spring MVC和Spring Boot的集成使得开发者能够更高效地进行测试驱动开发(TDD)或行为驱动开发(BDD)。下面将详细介绍这个主题中的相关知识点。 1. JUnit JUnit是一个...
9. **单元测试**:利用MockMVC进行Controller层面的单元测试。 10. **源码分析**:通过对Spring MVC源码的阅读和理解,学习其内部工作原理,提升问题排查和性能调优的能力。 以上就是基于提供的信息推测的Spring ...
在Spring Boot框架中,单元测试是一项至关重要的任务,它能够帮助开发者确保代码的正确性和可靠性。Spring Boot提供了方便的工具和库,使得编写和执行单元测试变得简单高效。本章节我们将深入探讨Spring Boot中的...
10. **单元测试和集成测试**:学习如何使用JUnit和Mockito等工具对Controller和Service层进行单元测试,以及使用Spring Test对整个应用进行集成测试。 通过这个简单的例子,初学者可以全面地了解Spring MVC的工作...
Spring MVC提供了MockMvc工具,可以在不启动服务器的情况下进行单元测试和集成测试。 这个“spring MVC_快速入门”文档可能涵盖了以上部分或全部内容,旨在帮助初学者快速理解Spring MVC的工作原理和基本用法。...
在 Spring 中,我们可以使用 `MockMvc` 工具进行单元测试,模拟 HTTP 请求并验证响应结果。 6. **实战案例** - 创建一个简单的 `HelloWorld` 控制器,使用 `@Controller` 注解标记,然后通过 `@RequestMapping` ...
十三、如何给spring3 MVC中的Action做JUnit单元测试? 十四、spring mvc 转发与重定向 十五、spring mvc 处理ajax请求 十六、spring mvc 关于写几个配置文件的说明 十七、spring mvc 如何取得Spring管理的bean 十八...