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'# ...
随机推荐
- 5G
前世 1G 2G 3G 4G 今生 5G 推荐书籍: Gold Smith -<无线通信> David Tse -<无线通信基础> 参考:
- Oracle函数-DECODE
DECODE翻译为解码或译码,因为它可以把查询结果翻译成令用户容易理解的内容. 语法: expr: 表达式 search:搜索值 result:结果值 default:默认值 DECODE函数的第一个 ...
- 前端 angular 和 bootstrap 的安装步骤
1.安装bower模块: npm install -g bower --registry=http://registry.npm.taobao.org 2.创建.bowerrc 文件存放 前端相关的模 ...
- Atitit.ide eclipse编译速度慢的解决
Atitit.ide eclipse编译速度慢的解决 以为是jar的体积与数量,貌似无关.. Err java的数量,貌似无关 Java的数量,关系不大... 最终原因:show>>pro ...
- Runnable和Thread
1.Runnable是一个接口,当实现该接口时需要复用run方法,在run方法中实现自己的逻辑. 2.Thread是一个类,它其实实现了Runnable方法,也就是说当你通过new 一个Thread得 ...
- spring入门(四)【面向切面编程】
开发过程中很多时候会用到日志.事务等操作,这些操作如果要写在业务代码中会相当麻烦,这时就会用到面向切面编程(AOP),AOP作为一种编程思想,和OOP有着不同的侧重点,面向对象侧重于万事万物皆对象,而 ...
- 聊聊JVM的年轻代
1.为什么会有年轻代 我们先来屡屡,为什么需要把堆分代?不分代不能完成他所做的事情么?其实不分代完全可以,分代的 唯一理由就是优化GC性能.你先想想,如果没有分代,那我们所有的对象都在一块,GC的时候 ...
- javascript组合继承
javascript继承有几种继承方式,现在来说说其中的组合继承. 组合继承是结合了原型链和借用构造函数这两种技术的继承方式,分别利用它们的长处,避免了短处.那就先说说这两种技术吧. 原型链 原型链 ...
- 推荐15个最好用的 JavaScript 代码压缩工具
JavaScript 代码压缩是指去除源代码里的所有不必要的字符,而不改变其功能的过程.这些不必要的字符通常包括空格字符,换行字符,注释以及块分隔符等用来增加可读性的代码,但并不需要它来执行. 在这篇 ...
- ember.js里的实用方法
一款基于jQuery的插件,以下是关于数组的一些方法 var arr = ['Wang', 'Jason', '444128852@qq.com', 'i2cao.xyz', 'ubuntuvim.x ...