MockMvc模拟对controller进行单元测试
2023-04-18 14:06:10 时间
本文为博主原创,未经允许不得转载:
MockMvc实现了对Http请求的模拟,能够直接使用网络的形式,转换到Controller的调用,这样可以使得测试速度快、不依赖网络环境,
而且提供了一套验证的工具,这样可以使得请求的验证统一而且很方便。
MockMvc用到的注解 :
@RunWith(SpringJUnit4ClassRunner.class): 表示使用Spring Test组件进行单元测试;
@ContextConfiguration: 配置文件路径,用于加载和初始化spring 环境,
如果有多个配置文件,可以将括号中的信息配置为一个字符串数组来表示;
---也可通过注解进行事务配置//配置事务的回滚,对数据库的增删改都会回滚,便于测试用例的循环利用
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
@Transactional
以下为项目中用到的MockMvc进行单元测试的方法,
---spring-dal-test.xml该文件为数据库配置bean的配置以及事务回滚配置的文件
---spring-service-test.xml该文件为项目中依赖的资源配置初始化加载文件
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:conf/spring/spring-dal-test.xml", "classpath:conf/spring/spring-service-test.xml" }) public class AdminUserManageControllerTest { @Autowired private AdminUserManageController adminUserManageController; private MockMvc mockMvc; @Before public void setup() { // 初始化构建 mockMvc = MockMvcBuilders.standaloneSetup(adminUserManageController).build(); } @Test public void queryAdminUserByPageTest001() throws Exception { // 分页查询用户信息 mockMvc.perform( //执行一个RequestBuilder请求,会自动执行SpringMVC的流程并映射到相应的控制器执行处理; post("/adminUserManage/queryAdminUserByPage") //模拟请求的url,及请求的方法是post .content("{"pageNum":1,"pageSize":20}")) //请求的参数体 .andExpect( status().isOk() //预期返回的状态码是200 ) .andReturn().getResponse().getContentAsString(); //将相应的数据转换为字符串 } }
常用方法总结:
perform:执行一个RequestBuilder请求,会自动执行SpringMVC的流程并映射到相应的控制器执行处理;
get:声明发送一个get请求的方法。MockHttpServletRequestBuilder get(String urlTemplate, Object... urlVariables):根据uri模板和uri变量值得到一个GET请求方式的。另外提供了其他的请求的方法,如:post、put、delete等。
param:添加request的参数,如上面发送请求的时候带上了了pcode = root的参数。假如使用需要发送json数据格式的时将不能使用这种方式,可见后面被@ResponseBody注解参数的解决方法
andExpect:添加ResultMatcher验证规则,验证控制器执行完成后结果是否正确(对返回的数据进行的判断);
andDo:添加ResultHandler结果处理器,比如调试时打印结果到控制台(对返回的数据进行的判断);
andReturn:最后返回相应的MvcResult;然后进行自定义验证/进行下一步的异步处理(对返回的数据进行的判断);
相关文章
- Python使用tkinter组件Label显示简单数学公式
- 内网渗透之DCOM横向移动
- 以目标为导向的语义交流的共同语言——一个课程学习框架
- python爬虫前奏【成信笔记】
- HTML 5 File API:文件拖放上传功能
- 教你快速创建 Python 虚拟环境
- pyenv 实现Python多版本自由切换
- 用 Python 对 Excel文件进行批量操作
- Python - 接入钉钉机器人
- Python - 抓取 iphone13 pro 线下店供货信息并发送到钉钉机器人,最后设置为定时任务
- crontab - 解决 mac 下通过 crontab 设置了 Python 脚本的定时任务却无法运行
- [源码解析] PyTorch分布式(5) ------ DistributedDataParallel 总述&如何使用
- Python科普系列——类与方法(上篇)
- SAP对STO的交货单执行PGI,报错 -Fld selectn for mvmt type 643 acct 400020 differs
- Spring Boot 实现通用 Auth 认证的 4 种方式
- 盘点4种使用Python批量合并同一文件夹内所有子文件夹下的Excel文件内所有Sheet数据
- OushuDB 学习经验分享(三):技术特点
- Java和Python思维方式的不同之处
- Python中日志记录新技能
- 奥比中光Gemini OpenCV—Python使用