本文为博主原创,未经允许不得转载:

 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;然后进行自定义验证/进行下一步的异步处理(对返回的数据进行的判断);

最新文章

  1. asp.net dataset 判断是否为空 ?
  2. ASP.NET MVC 提示there was error getting the type的解决方法
  3. ISO20000
  4. 解决TryUpdateModel对象为空的问题
  5. 移动端web app自适应布局探索与总结
  6. mysql优化学习笔记
  7. MongoDB的数据库基本操作(二)
  8. UML状态图(转载)
  9. Velocity常用方法
  10. ASP.NET过滤器、URL重写
  11. 转发:为什么Android使用弱加密算法?
  12. win7系统中桌面图标显示不正常问题
  13. Asp.net MVC + EF + Spring.Net 项目实践(四)
  14. Efim and Strange Grade
  15. iOS的基本图形绘制
  16. Python测试开发之random模块
  17. 【原创】SAP/Oracle 集团企业海外全球化实施注意事项: 一带一路本地化 (持续更新)
  18. js基础梳理-究竟什么是变量对象,什么是活动对象?
  19. [Android] 使用ViewPager 实现导航
  20. 基于Keras的自动驾驶技术的车轮转向角度的可视化

热门文章

  1. 当离开浏览器窗口,提示语title更改
  2. esp32固件烧录
  3. hdfs核心主件服务的启停方式
  4. spring batch (二) 元数据表
  5. js中filter的用法
  6. ACM-ICPC 2018 南京赛区网络预赛(A, J)
  7. vuex 入坑篇
  8. c#基础之abstract和interface
  9. Charles 抓包工具(新猿旺学习总结)
  10. Mac休眠后解决卡死转圈问题