简单介绍一下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、卸载测试环境