Spring MVC 测试 | 模拟提交表单

在 Spring 4 MVC 单元测试例子 一文中利用Spring test 框架进行了简单的测试,代码mockMvc.perform(get("/SayHello/getAnswer"))使用get()方法发送了一个GET请求。

现在需求变了,需要提交一个表单,该如何实现?

首先,要测试下面这样一个方法:

@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping(method = RequestMethod.POST)@ResponseStatus( HttpStatus.CREATED )public void addUser(@Validated User user,BindingResult result,HttpServletResponse response) throws BindException{//省去代码}}

注意它要接收一个User类对象作为参数,User类如下:

@Component
public class User {private long id;private String name;//省去getter和setter
}

模拟请求中要如何携带这样的参数呢?是创建一个User对象,添加到请求中吗?实际,测试类应该这样编写:

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations={"classpath:spring-servlet.xml","classpath:applicationContext.xml"})
public class UserControllerTest {@Autowiredprivate WebApplicationContext wac;private MockMvc mockMvc;@Beforepublic void Setup(){this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();}@Testpublic void testAddUser() throws Exception {    mockMvc.perform(post("/user").param("id", "1")) //注意这行.andDo(print()).andExpect(status().is(201)).andExpect(redirectedUrl("/user/1"));}}

从上面的代码中可以看出,post()方法可以像post("/user").param("id", "1")这样加入表单参数,要加多个参数,post()方法后面就可以加多个param()方法。只要param()方法添加的参数的名字和User类的属性名字相同即可。


  1. 这里使用的Spring框架版本号是4.2.4,3.x版本的测试可能与这个有所差别。

  2. 国外有网友也有遇到同样的问题,贴出实例代码,可以参看:Set @ModelAttribute in MockHttpServletRequest in JUnit Test

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430171.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安卓接受后台数据转换解析出错_安卓手机内存越大,速度就会越快?

与非网 2 月 18 日讯,现在安卓手机的内存在产品规划上越来越大,2020 年发布的旗舰手机运行内存已经拓展到惊人的 10GB 以上,而这个运存大小已经超过笔记本主流的 8GB 内存,手机到底需要这么大的内存吗?安卓手机的内存为…

Spring MVC搭建REST风格网站

REST是表述性状态转移的意思。REST核心是以资源为中心。 比如,URI是统一资源标识符,URL是一种URI,称为统一资源定位符。现在很多网站设计的URL,没有以资源为中心,没有体现URI的标识本质。比如,有一个URL:/…

usb

http://blog.csdn.net/jhqin/article/details/6734673 http://www.cnblogs.com/ceachy/archive/2013/03/22/WMI_Usage.html 转载于:https://www.cnblogs.com/answercard/p/5839013.html

ipv6地址格式_IPV6与IPV4的差异

ipv6相比,我们现在的IPV4,有什么优势,有什么差异IPv6的路由表更小,IPv6的组播支持以及对流的支持增强,IPv6加入了对自动配置的支持,IPv6具有更高的安全性. 与IPV4相比,IPV6具有以下几个优势:IPv6具有更大的地址空间。IPv4中规定IP…

@Autowired和构造方法执行的顺序解析

先看一段代码,下面的代码能运行成功吗? Autowiredprivate User user;private String school;public UserAccountServiceImpl(){this.school user.getSchool();} 答案是不能。因为Java类会先执行构造方法,然后再给注解了Autowired 的user注入…

SVN查看提交日志的命令

Windows下,使用svn客户端查看日志很方便,但是如果在linux下,常规查看日志的命令对于日志记录数比较多的时候,屏幕显示不了,就比较麻烦,后来发现了一个很有用的参数可以限制要查看的记录条数 查看某个目录下…

python postgresql跨数据库查询_python访问PostgreSQL数据库之连接库Psycopg2

python访问PostgreSQL数据库之连接库Psycopg2作者:佣工7001由于要在python访问PostgreSQL数据库,需要一个符合DB-API的连接库。通过搜索,锁定两个候选库:一个是py-postgresql,一个是Psycopg2。简单的看了一下py-postgr…

[LeetCode]160. Intersection of Two Linked Lists

题目: Write a program to find the node at which the intersection of two singly linked lists begins. For example, the following two linked lists: A: a1 → a2↘c1 → c2 → c3↗ B: b1 → b2 → b3 判断两个链表是否相交&#x…

MongoClient类参考文档

(MongoClient类的实例是)一个带有内部连接池的MongoDB客户端。对绝大部分应用来说,都应该有一个MongoClient实例(不知怎翻译)。 下面各种创建实例的方法是等效的,并且全部都通过默认端口连到本地数据库的&…

反序列化对象列表发生异常_通过反序列化漏洞,黑客能做什么呢?

在之前的文章中讲解了一个反序列化的例子,我们已经知道,通过反序列化漏洞,黑客可以调用到Runtime.exec()来进行命令执行。换一句话说,黑客已经能够在服务器上执行任意的命令,这就相当于间接掌控了你的服务器&#xff0…

nodeJS理解

nodejs是一个基于Chrome V8 引擎的JS运行环境,也就是让javascript运行在服务器(server)端, NodeJS使用了一个事件驱动,非阻塞式的I/O模型,使得其轻量又高效。 Nodejs包管理器npm是全球最大的开源生态系统。…

pythonwhile输出每一个余数_Python 基础 - day02-3

Python 基础 - day02-3循环目标程序的三大流程while 循环基本使用break 和 continuewhile 循环嵌套01. 程序的三大流程在程序开发中, 一共有三种流程方式:顺序 -- 从上向下, 顺序执行代码分支 -- 根据条件判断, 决定执行代码的 分支循环 -- 让 特定代码 重复 执行02. while 循环…

Spring MVC表单验证

看登录控制器代码: RequestMapping(methodRequestMethod.POST,path"/login")public void login(Validated UserEntity user,BindingResult result,HttpServletResponse response) throws BindException{if(result.hasErrors()){response.setHeader("…

小程序开发语言python_小程序是用什么语言开发的?5种最佳语言分享

你应该学习哪种编程语言来探索AI的深度?当然,你会需要一个拥有许多优秀机器学习和深度学习库的语言。它还应具有良好的运行时性能,良好的工具支持,大量程序员社区以及健康的支持包生态系统。这仍然留下了很多不错的选择。下面是我…

tcl之内容

转载于:https://www.cnblogs.com/chip/p/5847126.html

自定义hibernate validation注解

效果和优点 先看最后效果: public class UserEntity {Password private String password;Emailprivate String email;} 上面使用了两个自定义的注解来验证password和email,这样做的好处是:一处定义,处处使用,要修改…

《JS权威指南学习总结--9.5 类和类型》

内容要点: 介绍了三种用以检测任意对象的类的技术,instanceof运算符、constructor属性,以及构造函数的名字。 但每种技术都不甚完美,本节总结了鸭式辩型,这种编程哲学更加关注对象可以完成什么工作(它包含什…

js密码强度正则表达式_知道这20个前端正则表达式,能让你做项目时少写1000行甚至一万行

正则表达式,一个十分古老而又强大的文本处理工具,仅仅用一段非常简短的表达式语句,便能够快速实现一个非常复杂的业务逻辑。熟练地掌握正则表达式的话,能够使你的开发效率得到极大的提升。正则表达式经常被用于字段或任意字符串的…

MongoDB数据库设计备忘

1、sex存为01还是男女? 存为01主要是为了国际化和节省存储空间。存为01很容易转换成不同语言表示的男女。 2、文件存储方案 MongoDB有GirdFS用来将文件直接保存到数据库,如果使用nginx,可以直接使用http读取GridFS里面的文件。 所以&…

react js 按条数 展开/折叠

//2条const MAX_SHOW_NUM 2;class HotDiscuss extends Component { static propTypes { //验证 repliedCommentList: PropTypes.array, }; constructor(props) { super(props); this.state { //子评论折叠 isCl…