原创

SpringMVC 中 MockMvc 注解变量含义总结

        简单介绍一下Spring,它是一个轻量级开源框架,简单的来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架。特点方便解耦,简化开发,AOP编程的支持声明式,事务的支持以及降低Java EE API的使用难度等。目前主流的Web MVC框架除了Struts之外就是SpringMVC,不过要想灵活运用SpringMVC来应对大多说的web开发除了必须掌握其配置和原理外还需要会测试。下面为大家分享一下SpringMVC中MockMvc注解变量及其含义。


SpringJunitTestMock测试类下各个注解/变量的含义如下:

1、下面对各变量/注解进行解释 

@WebAppConfiguration 

表明该类会使用web应用程序的默认根目录来载入ApplicationContext, 默认的更目录是"src/main/webapp", 如果需要更改这个更目录可以修改该注释的value值。 

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration(value = "src/main/webapp")
@ContextHierarchy({
    @ContextConfiguration(name = "parent" ,locations = "classpath:applicationContext.xml"),
})

@RunWith 

使用 Spring-Test 框架;在使用所有注释前必须使用@RunWith(SpringJUnit4ClassRunner.class),让测试运行于Spring测试环境。

@ContextConfiguration(location = ): 指定需要加载的spring配置文件的地址

@Mock: 需要被Mock的对象 

@Transactional:不是必须的,是和@TestExecutionListeners中的TransactionalTestExecutionListener.class配合使用,用于保证插入的数据库中的测试数据,在测试完后,事务回滚,将插入的数据给删除掉,保证数据库的干净。如果没有显示的指定@Transactional,那么插入到数据库中的数据就是真实数据。

@InjectMocks: 需要将Mock对象注入的对象, 此处就是Controller

@Before: 在每次Test方法之前运行的方法,目前把登陆信息放到session中处理,以及初始化mockMvc。

mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();

@Test:执行测试


2、具体测试的方法 

测试方法中的mockMvc需要调用的方法: 

1)mockMvc.perform执行一个请求(该请求由2构造); 

2)MockMvcRequestBuilders.get("/user/1")构造一个请求 

3)ResultActions.andExpect添加执行完成后的断言,目的测试返回结果,通过返回结果来确认测试是否成功

4)ResultActions.andDo添加一个结果处理器,表示要对结果做点什么事情,比如此处使用MockMvcResultHandlers.print()输出整个响应结果信息。 

5)ResultActions.andReturn表示执行完成后返回相应的结果。 

mockMvc.perform(执行一个请求)  
(MockMvcRequestBuilders.get("/order/one_orders")构造一个请求
                .session(session)                  
.contentType(MediaType.APPLICATION_XHTML_XML)                 
.param("page", "1"))  
.andExpect(view().name("order/one_orders/index"))//执行完后写断言


3、整个测试过程非常有规律:  

1)准备测试环境 

2)通过MockMvc执行请求 

3)添加验证断言 

4)添加结果处理器  

5)得到MvcResult进行自定义断言/进行下一步的异步请求 

4、卸载测试环境

关注下方微信公众号“Java精选”(w_z90110),回复关键字领取资料:如HadoopDubboCAS源码等等,免费领取资料视频和项目。 

涵盖:程序人生、搞笑视频、算法与数据结构、黑客技术与网络安全、前端开发、Java、Python、Redis缓存、Spring源码、各大主流框架、Web开发、大数据技术、Storm、Hadoop、MapReduce、Spark、elasticsearch、单点登录统一认证、分布式框架、集群、安卓开发、iOS开发、C/C++、.NET、Linux、Mysql、Oracle、NoSQL非关系型数据库、运维等。

评论

分享:

支付宝

微信