Spring Junit 测试样例
SpringMVC 框架下的junit测试方式
1 package com.sixeco.user.controller; 2 3 import org.apache.logging.log4j.LogManager; 4 import org.apache.logging.log4j.Logger; 5 import org.junit.Before; 6 import org.junit.Test; 7 import org.junit.runner.RunWith; 8 import org.springframework.beans.factory.annotation.Autowired; 9 import org.springframework.http.MediaType; 10 import org.springframework.test.annotation.Rollback; 11 import org.springframework.test.context.ContextConfiguration; 12 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 13 import org.springframework.test.context.transaction.TransactionConfiguration; 14 import org.springframework.test.context.web.WebAppConfiguration; 15 import org.springframework.test.web.servlet.MockMvc; 16 import org.springframework.test.web.servlet.MvcResult; 17 import org.springframework.test.web.servlet.ResultActions; 18 import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; 19 import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; 20 import org.springframework.test.web.servlet.result.MockMvcResultHandlers; 21 import org.springframework.test.web.servlet.result.MockMvcResultMatchers; 22 import org.springframework.test.web.servlet.setup.MockMvcBuilders; 23 import org.springframework.transaction.annotation.Transactional; 24 import org.springframework.web.context.WebApplicationContext; 25 26 import com.alibaba.fastjson.JSONObject; 27 28 /** 29 * 测试类 30 * 31 * @author songxiaotong 32 * @version [版本号, 2017年09月15日] 33 * @see [相关类/方法] 34 * @since [产品/模块版本] 35 */ 36 @RunWith(SpringJUnit4ClassRunner.class) 37 // 设置读取的spring配置文件 38 @ContextConfiguration({ "classpath:servlet-context.xml" }) 39 // 当然 你可以声明一个事务管理 每个单元测试都进行事务回滚 无论成功与否 40 @TransactionConfiguration(defaultRollback = true) 41 @Transactional 42 @WebAppConfiguration 43 public class UserControllerTest { 44 45 /** 46 * 日志记录工具 47 */ 48 private static final Logger LOGGER = LogManager.getLogger(UserControllerTest.class); 49 50 @Autowired 51 private WebApplicationContext wac; 52 53 private MockMvc mockMvc; 54 55 @Before 56 public void setUp() throws Exception { 57 this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build(); 58 } 59 60 @Test 61 @Rollback(false) 62 public void aaa() { 63 LOGGER.info("12312312312"); 64 System.out.println("aaa"); 65 } 66 67 /** 68 * Json请求入参方式测试接口 69 * 70 * @see [类、类#方法、类#成员] 71 */ 72 @Test 73 // 有些单元测试你不希望回滚 74 @Rollback(true) 75 public void Test() { 76 try { 77 78 // 构造一个请求 79 MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.post("/sixeco/user/sendverifycode"); 80 // 设置请求头 81 requestBuilder.contentType(MediaType.APPLICATION_JSON); 82 83 // 设置参数 84 requestBuilder.param("mobile", "15812345678"); 85 86 // 执行一个请求; 87 ResultActions result = mockMvc.perform(requestBuilder); 88 89 // 添加执行完成后的断言 90 result.andExpect(MockMvcResultMatchers.status().isOk()); 91 92 // 添加一个结果处理器,表示要对结果做点什么事情,比如此处使用MockMvcResultHandlers.print()输出整个响应结果信息。 93 result.andDo(MockMvcResultHandlers.print()); 94 95 // 表示执行完成后返回相应的结果。 96 MvcResult mvcResult = result.andReturn(); 97 98 LOGGER.info(mvcResult.getResponse().getContentAsString()); 99 100 LOGGER.info("test success"); 101 } catch (Exception e) { 102 LOGGER.error(e.getMessage()); 103 e.printStackTrace(); 104 } 105 } 106 107 /** 108 * 普通入参请求方式测试接口 109 * 110 * @see [类、类#方法、类#成员] 111 */ 112 @Test 113 // 有些单元测试你不希望回滚 114 // @Rollback(false) 115 public void regularRequestTest() { 116 try { 117 118 MockHttpServletRequestBuilder b = MockMvcRequestBuilders.post("/sixeco/user/sendverifycode"); 119 b.contentType(MediaType.APPLICATION_JSON); 120 b.param("mobile", "15812345678"); 121 122 mockMvc.perform(b).andExpect(MockMvcResultMatchers.status().isOk()).andDo(MockMvcResultHandlers.print()); 123 // LOGGER.info("test success"); 124 } catch (Exception e) { 125 // LOGGER.error(e.getMessage()); 126 e.printStackTrace(); 127 } 128 } 129 }