SpringMVC单元测试之MockMVC,模拟登入用户
今天介绍一下springMVC的单元测试,可以参考spring官方文档进行
前提准备,springmvc的demo工程,这里就不做叙述了
pom.xml
[html] view plain copy 在CODE上查看代码片派生到我的代码片
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency> controller层
[java] view plain copy 在CODE上查看代码片派生到我的代码片
package controller; import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import service.UserService;
import domain.User; /**
* UserController.
* @author Leon Lee
*/
@RestController
@RequestMapping(value = "user")
public class UserController { /**
* UserService interface.
*/
@Autowired
private UserService userService; /**
* Get user MSG.
* @param userId
* @return user Msg
*/
@RequestMapping(value = "userMsg/{userId}", method = RequestMethod.GET)
public User getUserMsg(@PathVariable(value = "userId") String userId) {
return userService.getUserMsg(userId);
} /**
* Update user MSG.
* @param userId
* @param userName
* @return updated user MSG
*/
@RequestMapping(value = "userMsg/{userId}", method = RequestMethod.PUT)
public User putUserMsg(@PathVariable(value = "userId") String userId, @RequestParam String userName,HttpSession session){
if(null == (String)session.getAttribute("loginUser"))
return new User();
System.out.println((String)session.getAttribute("loginUser"));
return userService.putUserMsg(userId, userName);
} /**
* Delete user.
* @param userId
* @return deleted user MSG
*/
@RequestMapping(value = "userMsg/{userId}", method = RequestMethod.DELETE)
public User delUserMsg(@PathVariable(value = "userId") String userId){
return userService.delUserMsg(userId);
} /**
* Add user.
* @param userName
* @return added user MSG
*/
@RequestMapping(value = "userMsg", method = RequestMethod.POST)
public User postUserMsg(@RequestParam String userName){
return userService.postUserMsg(userName);
} /**
* login User. Note that do not send password as url.
* @param userId
* @param password
* @return
*/
@RequestMapping(value = "userMsg/{userId}/{password}", method = RequestMethod.GET)
public boolean loginUser(@PathVariable String userId, @PathVariable String password, HttpSession session){
if("loginUser".equals(userId)&&"loginUser".equals(password)){
session.setAttribute("loginUser", userId);
return true;
}
return false;
}
} 单元测试类
这里的静态导入比较重要,有时候没办法自动导入的
就是下面的 import static xxx.* 另一点,
[java] view plain copy 在CODE上查看代码片派生到我的代码片
@ContextConfiguration(locations = {"classpath:applicationContext.xml","classpath:applicationContext.mvc.xml"})
代表的是加载的配置文件,可以根据需要进行添加 [java] view plain copy 在CODE上查看代码片派生到我的代码片
package controller.test; import static org.springframework.test.web.servlet.setup.MockMvcBuilders.*;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; import javax.servlet.http.HttpSession; import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.mock.web.MockHttpSession;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.context.WebApplicationContext; /**
* spring mvc Test.
* @author Leon Lee
* @since spring-4.1.7
*/
// spring 4.3 change to SpringRunner.class
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations = {"classpath:applicationContext.xml","classpath:applicationContext.mvc.xml"})
// do rollback
@TransactionConfiguration(defaultRollback = true)
@Transactional
public class TestTemplate {
@Autowired
private WebApplicationContext wac; private MockMvc mockMvc;
private MockHttpSession session; @Before
public void setup() {
// init applicationContext
this.mockMvc = webAppContextSetup(this.wac).build();
this.session = new MockHttpSession();
} @Test
public void getUserMsg() throws Exception {
// get using get
this.mockMvc
.perform((get("/user/userMsg/003"))
.accept(MediaType.parseMediaType("application/json;charset=UTF-8")))
.andExpect(status().isOk())
.andExpect(content().contentType("application/json;charset=UTF-8"))
.andDo(print()); // print
} @Test
// don't rollback
@Rollback(false)
public void putUserMsg() throws Exception {
// update using put
this.mockMvc
.perform((put("/user/userMsg/003"))
.contentType(MediaType.APPLICATION_FORM_URLENCODED)
.param("userName","新名字03号")
.session((MockHttpSession)getLoginSession())
.accept(MediaType.parseMediaType("application/json;charset=UTF-8"))
)
.andExpect(status().isOk())
.andExpect(content().contentType("application/json;charset=UTF-8"))
.andDo(print()); // print
} @Test
public void delUser() throws Exception {
// delete using delete
this.mockMvc
.perform((delete("/user/userMsg/004"))
.accept(MediaType.parseMediaType("application/json;charset=UTF-8"))
)
.andExpect(status().isOk())
.andExpect(content().contentType("application/json;charset=UTF-8"))
.andDo(print()); //print
} @Test
// don't rollback
@Rollback(false)
public void postUser() throws Exception{
// add using post
this.mockMvc
.perform((post("/user/userMsg"))
.param("userName", "最新的用户")
.accept(MediaType.parseMediaType("application/json;charset=UTF-8"))
)
.andExpect(status().isOk())
.andExpect(content().contentType("application/json;charset=UTF-8"))
.andDo(print()); //print
} /**
* 获取登入信息session
* @return
* @throws Exception
*/
private HttpSession getLoginSession() throws Exception{
// mock request get login session
// url = /xxx/xxx/{username}/{password}
MvcResult result = this.mockMvc
.perform((get("/user/userMsg/loginUser/loginUser")))
.andExpect(status().isOk())
.andReturn();
return result.getRequest().getSession();
}
}
SpringMVC单元测试之MockMVC,模拟登入用户的更多相关文章
- vuex存取token,http简单封装、模拟登入权限校验操作、路由懒加载的几种方式、vue单页设置title
1.config index.js下面的跨域代理设置: proxyTable: { '/api': { target: 'http://xxxx', //要访问的后端接口 changeOrigin: ...
- spring boot单元测试之MockMvc
spring单元测试之MockMvc,这个只是模拟,并不是真正的servlet,所以session.servletContext是没法用的. @RunWith(SpringRunner.class) ...
- Python爬虫-尝试使用人工和OCR处理验证码模拟登入
刚开始在网上看别人一直在说知乎登入首页有有倒立的汉字验证码,我打开自己的知乎登入页面,发现只有账号和密码,他们说的倒立的验证码去哪了,后面仔细一想我之前登入过知乎,应该在本地存在cookies,然后我 ...
- 【Android Training - UserInfo】记住登入用户的信息[Lesson 1 - 使用AccountManager来记住用户]
Remembering Your User[记住你的用户] 每一个人都非常喜欢自己的名字能被人记住.当中最简单,最有效的使得你的app让人喜欢的方法是记住你的用户是谁,特别是当用户升级到一台新的设备或 ...
- springmvc shiro整合cas单点登入
shiro cas分为登入跟登出 maven依赖: <dependency> <groupId>org.apache.shiro</groupId> <art ...
- 8-python模拟登入(无验证码)
方式: 1.手动登入,获取cookie 2.使用cookielib库 和 HTTPCookieProcessor处理器 #_*_ coding: utf-8 _*_ ''' Created on 20 ...
- Junit单元测试之MockMvc
在测试restful风格的接口时,springmvc为我们提供了MockMVC架构,使用起来也很方便. 下面写个笔记,便于以后使用时参考备用. 一 场景 1 . 提供一个restful风格的接口 im ...
- 模拟登入教务处(header)
import HTMLParser import urlparse import urllib import urllib2 import cookielib import string import ...
- [Django]登陆界面以及用户登入登出权限
前言:简单的登陆界面展现,以及用户登陆登出,最后用户权限的问题 正文: 首先需要在settings.py设置ROOT_URLCONF,默认值为: ROOT_URLCONF = 'www.urls'# ...
随机推荐
- Asp.Net Core子应用由于配置中重复添加模块会引起IIS错误500.19
ASP.NET Core已经从IIS中解耦,可以作为自宿主程序运行,不再依赖IIS. 但我们还是需要强大的IIS作为前置服务器,IIS利用httpPlatformHandler模块来对后台的一些web ...
- Hibernate 更新部分字段的实现
在Hibernate 中,有时我们只需要更新部分字段,此时如果使用update()方法,会将所有字段都更新,对于没有set的字段,就会设置成NULL,如果这些字段里面有非空的字段就会报错. 解决的方法 ...
- Java中, 函数的调用、随机数字
函数: 独立完成某个功能的代码模块.(方法) 作用是为了让代码结构更加良好.模块清晰,实现重用. 函数的四要素:名称,输入值,加工过程,返回值 Java中函数的语法 static 返回类型 函 ...
- 基于 Eclipse 的 MapReduce 开发环境搭建
文 / vincentzh 原文连接:http://www.cnblogs.com/vincentzh/p/6055850.html 上周末本来要写这篇的,结果没想到上周末自己环境都没有搭起来,运行起 ...
- S1java基础学习笔记
第一章 Java基础 程序目标:减轻现实生活中一类人的工作量,提高工作效率. 学员最终可以书写系统: 超市管理系统,POS机系统等 入库单 销售单 01.课程重点 五大重点: 01.分支(选择)结构 ...
- Code First :使用Entity. Framework编程(5) ----转发 收藏
第五章 对数据库映射使用默认规则与配置 到目前为止我们已经领略了Code First的默认规则与配置对属性.类间关系的影响.在这两个领域内,Code First不仅影响模型也影响数据库.在这一章,你将 ...
- Sharepoint学习笔记—习题系列--70-576习题解析 -(Q102-Q104)
Question 102 You are designing a Windows application that accesses information stored on a ShareP ...
- Android APP性能分析方法及工具
近期读到<Speed up your app>一文.这是一篇关于Android APP性能分析.优化的文章.在这篇文章中,作者介绍他的APP分析优化规则.使用的工具和方法.我觉得值得大家借 ...
- 数据集转换为Json
数据集转换为Json 第一步:新建一个类对象 通常我会写三个属性:状态.返回信息.数据集 第二步:新建一个JSON转换类 第三步:把类对象当做参数传入JSON转换类 ———————————————— ...
- 【代码笔记】iOS-向服务器传JSON数据的两种方式
一,代码. - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. ...