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'# ...
随机推荐
- touchstart,touchmove,touchend触摸事件的小小实践心得
近段时间使用html5开发一个公司内部应用,而触摸事件必然是移动应用中所必须的,刚开始以为移动设备上或许也会支持鼠标事件,原来是不支持的,好在webkit内核的移动浏览器支持touch事件,并且打包成 ...
- 背水一战 Windows 10 (35) - 控件(弹出类): FlyoutBase, Flyout, MenuFlyout
[源码下载] 背水一战 Windows 10 (35) - 控件(弹出类): FlyoutBase, Flyout, MenuFlyout 作者:webabcd 介绍背水一战 Windows 10 之 ...
- Python爬取代理ip
# -*- coding:utf-8 -*- #author : willowj import urllib import urllib2 from bs4 import BeautifulSoup ...
- 能力素质模型咨询工具(Part1)
之前写过由企业家基本素质想到的文章,里面提及一些能力与素质,以下有内容也可以参考: 领导职位 表6-1 远见卓识的行为表现 级 别 行 为 表 现 A (1)关注行业的前景和环境的变化, ...
- B-Tree索引在sqlserver和mysql中的应用
在谈论数据库性能优化的时候,通常都会提到“索引”,但很多人其实并没有真正理解索引,也没有搞清楚索引为什么就能加快检索速度,以至于在实践中并不能很好的应用索引.事实上,索引是一种廉价而且十分有效的优化手 ...
- java多线程-读写锁
Java5 在 java.util.concurrent 包中已经包含了读写锁.尽管如此,我们还是应该了解其实现背后的原理. 读/写锁的 Java 实现(Read / Write Lock Java ...
- React入门最好的学习实例-TodoList
前言 React 的核心思想是:封装组件,各个组件维护自己的状态和 UI,当状态变更,自动重新渲染整个组件. 最近前端界闹的沸沸扬扬的技术当属react了,加上项目需要等等原因,自己也决定花些时间来好 ...
- 统计和分析系统性能【IO CPU 内存】的工具集合
统计和分析系统性能[IO CPU 内存]的工具集合 blktrace http://www.oschina.net/p/blktrace 获取磁盘写入的信息 root@demo:~/install/p ...
- Android Json处理框架
1.Android 中的Json解析工具fastjson .序列化.反序列化 2.Android Gson的使用总结 3.Android-JSONTool 一个简易的Json框架类,小到只有一个类 有 ...
- Android 手机卫士--对话初次设置密码验证过程
本文实现设置密码对话框的逻辑判断 本文地址:http://www.cnblogs.com/wuyudong/p/5940551.html,转载请注明出处. 首先添加上图按钮的监听事件代码 /** * ...