Spring 4 MVC 单元测试例子
首先,要有一个Spring MVC项目,不会的话,点这里看教程。
加入 maven 依赖:
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version></dependency><!-- spring test --><!-- 提供测试支持--> <dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>4.2.4.RELEASE</version></dependency>
被测试的类:SayHelloController。这个类不用改动,只是贴出来表明,通过 /SayHello/getAnswer
就可以访问到 helloWorld()
方法
@Controller
@RequestMapping("/SayHello")
public class SayHelloController { @RequestMapping( path = "/getAnswer" , method = RequestMethod.GET)public String helloWorld() {return "redirect:/answer.jsp";}}
测试类:SayHelloControllerTest。按 ctrl+o 导入依赖。
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations={"classpath:applicationContext.xml","classpath:spring-servlet.xml"})
public class SayHelloControllerTest {@Autowiredprivate WebApplicationContext wac;private MockMvc mockMvc;@Beforepublic void setup() {this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();}@Testpublic void testHelloWorld() throws Exception {mockMvc.perform(get("/SayHello/getAnswer")).andDo(print()).andExpect(status().is3xxRedirection()).andExpect(redirectedUrl("/answer.jsp"));}}
注意: 如果你的spring 和spring mvc 配置文件放在 /WEB-INF/ 目录下,那么选中 /WEB-INF/ 目录,“右键”–“build path”– “use as source folder” ,将两个配置文件加入到 classes目录下,因为
classpath:
要求配置文件在classes目录下。
上面代码中的get方法需要静态引入,添加引入语句如下:
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
完了,要做的只有这么多:增加依赖项,然后写一个测试类。可以通过 run as junit test 来看下效果。
上面的代码,可以看成一个模板+一个测试方法,模板如下:
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations={"classpath:applicationContext.xml","classpath:spring-servlet.xml"})
public class SayHelloControllerTest {@Autowiredprivate WebApplicationContext wac;private MockMvc mockMvc;@Beforepublic void setup() {this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();}// 下面写测试方法}
这个模板,只要改变配置文件的位置,其它不用动。模板代码的作用就是创建模拟的测试环境。
测试方法如下:
@Testpublic void testHelloWorld() throws Exception {mockMvc.perform(get("/SayHello/getAnswer")).andDo(print()).andExpect(status().is3xxRedirection()).andExpect(redirectedUrl("/answer.jsp"));}
上面这段代码,用 perform(get("/SayHello/getAnswer"))
发送一个请求,这个请求和真正的请求一样,会经过DispatcherServlet
,然后调用被测试类SayHelloController
的helloWorld()
方法。
.andDo(print())
是当请求执行完后,执行打印所有相关信息动作。print()
是一个静态方法,来自MockMvcResultHandlers
。
.andExpect(status().is3xxRedirection())
。.andExpect( 预期)判断实际响应与预期是否相等。比如这里,我断言发送/SayHello/getAnswer
请求后,会返回一个响应,响应状态为3XX重定向。如果测试中,实际返回的是3XX重定向,这个方法不会出现问题,但如果返回的不是3XX,那么这个方法就会抛出异常,我们就知道被测试的类可能某个地方出现问题了。
项目代码
Spring 4 MVC 单元测试例子相关推荐
- Spring MVC学习总结(1)——Spring MVC单元测试
关于spring MVC单元测试常规的方法则是启动WEB服务器,测试出错 ,停掉WEB 改代码,重启WEB,测试,大量的时间都浪费在WEB服务器的启动上,下面介绍个实用的方法,spring MVC单元 ...
- spring框架mvc框架_Spring MVC测试框架入门–第2部分
spring框架mvc框架 这个迷你系列的第一个博客介绍了Spring MVC测试框架,并演示了其在单元测试Spring MVC Controller类中作为控制器而不是POJO进行单元测试的用途. ...
- Spring 3 MVC深入研究
前言: 大家好,Spring3 MVC是非常优秀的MVC框架,由其是在3.0版本发布后,现在有越来越多的团队选择了Spring3 MVC了.Spring3 MVC结构简单,应了那句话简单就是美,而且他 ...
- Spring Boot干货系列:(十二)Spring Boot使用单元测试 | 嘟嘟独立博客
原文地址 2017-12-28 开启阅读模式 Spring Boot干货系列:(十二)Spring Boot使用单元测试 Spring Boot干货系列 Spring Boot 前言 这次来介绍下Sp ...
- Spring Web MVC(一)
概述 Spring Web MVC框架的特点 五大核心组件 编程步骤 五大核心组件 DispatcherServlet前端控制器 WebApplicationContext中特殊的bean 处理过程 ...
- 多个切点 boot spring_全网独家Spring/Cloud/MVC/Boot,脑图+面试+进阶,就问你服不服?...
近期搜刮了一些Spring全家桶系列的思维脑图.经典面试题和进阶学习的PDF笔记(非常nice),Spring+SpringCloud+SpringMVC+SpringBoot,一个都没落下全都有!一 ...
- Spring Web MVC是什么
2.1.Spring Web MVC是什么 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职 ...
- spring框架mvc框架_Spring的MVC测试框架入门–第1部分
spring框架mvc框架 最新推出的主要Spring框架是Spring MVC测试框架,Spring Guys声称它是"一流的JUnit支持,可通过流畅的API测试客户端和服务器端Spri ...
- spring tiles_Spring MVC 3模板和Apache Tiles
spring tiles 对于任何Web应用程序,有效的设计考虑因素是使用模板引擎(或工具),并且由于具有Spring的"可插拔"特性,集成模板机制(例如Apache Tiles) ...
最新文章
- 第二十二章:动画(十五)
- 在tomcat中部署mule项目
- Spring事务回滚和异常类
- Java JVM、JNI、Native Function Interface、Create New Process Native Function API Analysis
- 几万年前,有一只猴子大闹地府后删库跑路...
- How-to: Build VPP FD.IO development environment with Mellanox DPDK PMD.
- sqoop和sqoop2区别
- python的设计具有很强的可读性_Python是什么?具有怎么样的特点呢?
- tensorflow have no attribute enable_eager_execution() 问题解决
- linux 正向代理与反向代理
- LaTeX 注释一行的某一部分
- Graph_editor——好用的画图软件,你会用吗?
- 【七日阅书】1.注重实效《程序员修炼之道—从小工到专家》
- android_root后的玩机:magisk模块root隐藏/lsposedxposed框架的使用/MIUI小窗多开
- 荣耀v40和华为Nova8pro哪个好 华为Nova8pro和荣耀v40的区别
- PLC PLSY 指令
- 编程随想(编程学什么语言好)
- 台达DVP-EH3系列PLC如何实现远程编程调试和程序上下载?
- 2021-2027全球与中国自然对流烤炉市场现状及未来发展趋势
- QGIS源码编译步骤详解——官方新方案
热门文章
- 微信支付 签名算法 sign node实现
- rman全备时,配置项如何设置?
- superset 图标调整
- 查重多少合格_期刊论文查重一般多少合格?
- Java中BigDecimal的8种舍入模式
- machine id linux,linux – 机器ID是uuid吗?
- 1024电商项目的邮箱验证码与图形验证码功能模块
- 原来js的parseInt函数还可以这样用
- 目前微型计算机中常用的鼠标器有什么两类,2009年计算机一级考试真题及答案...
- 【剑指offer - C++/Java】8、跳台阶