最近使用Mockito完成了几个简单的测试,写个博客mark一下:
第一种模拟web请求
1@SpringBootTest 2@RunWith(SpringRunner.class) 3@WebAppConfiguration //测试环境使用,用来表示测试环境使用的ApplicationContext将是WebApplicationContext类型的;value指定web应用的根 4public class ControllerTest { 5 private static final Logger logger = LogManager.getLogger(ControllerTest.class); 6 7 @Autowired 8 private WebApplicationContext context; 9 10 @Mock 11 private UserInfoService userInfoService; 12 13 private MockMvc mockMvc; 14 15 /** 16 * 构造MockMvc 17 * @throws Exception 18 */ 19 @Before 20 public void setupMockMvc() throws Exception { 21 // 初始化Mock 22 MockitoAnnotations.initMocks(this); 23 mockMvc = MockMvcBuilders.webAppContextSetup(context).build(); 24 } 25 26 /** 27 * 模拟add请求 28 */ 29 @Test 30 public void insertUserInfoTest() { 31 UserInfo userInfo = initUserInfo(); 32 when(userInfoService.insert(any())).thenReturn(1); 33 logger.info("++++++++++++++++++++++++++" + userInfo.toString()); 34 // 调用接口,传入添加的用户参数 35 try{ 36 String response = mockMvc.perform(post("/userInfo/add").contentType(MediaType.APPLICATION_JSON) 37 .content(userInfo.toString()).header("SESSIONNO", "EA60F3C2C7384DBA8A7B8B114474DC12")) 38 .andReturn().getResponse().getContentAsString(); 39 logger.info("******************" + response); 40 41 }catch (Exception e) { 42 e.printStackTrace(); 43 } 44 45 } 46 47 @Test 48 public void addTest() { 49 try { 50 // 1. controller mvc test 51 MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get("/userInfo/add")) 52 .andExpect(MockMvcResultMatchers.handler().handlerType(UserInfoController.class)) 53 .andExpect(MockMvcResultMatchers.handler().methodName("addUserInfo")) 54// .andExpect(MockMvcResultMatchers.view().name("demo/hello")) 55// .andExpect(MockMvcResultMatchers.model().attributeExists("msg")) 56 .andExpect(MockMvcResultMatchers.status().isOk()) 57 .andDo(MockMvcResultHandlers.print()) 58 .andReturn(); 59// Assert.assertNotNull(result.getModelAndView().getModel().get("msg")); 60 61 }catch (Exception e) { 62 e.printStackTrace(); 63 } 64 } 65 66 /** 67 * 模拟update测试 68 */ 69 @Test 70 public void updateUserInfo() { 71 try{ 72// String response = mockMvc.perform(post("/user/updateUser").contentType(MediaType.APPLICATION_JSON) 73// .content(userInfo.toString()).header("SESSIONNO", "EA60F3C2C7384DBA8A7B8B114474DC12")) 74// .andReturn().getResponse().getContentAsString(); 75// logger.info("update****" + response); 76 }catch (Exception e) { 77 e.printStackTrace(); 78 } 79 } 80 81 private UserInfo initUserInfo() { 82 UserInfo userInfo = new UserInfo(); 83 userInfo.setBirthday(new Timestamp(System.currentTimeMillis())); 84 userInfo.setCreateTime(new Timestamp(System.currentTimeMillis())); 85 userInfo.setEducation(5); 86 userInfo.setIdCardCode("********************"); 87 userInfo.setMaritalStatus(1); 88 userInfo.setNickName("社会主义接班人"); 89 userInfo.setPassword(encoderByMd5("a123456")); 90 userInfo.setPhoneNumber("************"); 91 userInfo.setSex(1); 92 userInfo.setStatus(1); 93 userInfo.setUserAddress("hlxj"); 94 userInfo.setUserEmail("**********@qq.com"); 95 userInfo.setUserImage("图片"); 96 userInfo.setUserName("dsc"); 97 98 return userInfo; 99 } 100 101 private String encoderByMd5(String password) { 102 //确定计算方法 103 String md5Password = null; 104 try { 105 MessageDigest md5 = MessageDigest.getInstance("MD5"); 106 BASE64Encoder base64en = new BASE64Encoder(); 107 //加密后的字符串 108 md5Password = base64en.encode(md5.digest(password.getBytes("utf-8"))); 109 logger.info(md5Password); 110 }catch (Exception e){ 111 e.printStackTrace(); 112 } 113 114 return md5Password; 115 } 116}
第二种模拟web请求
1@RunWith(SpringRunner.class) 2public class ServiceTest { 3 4 private static final Logger logger = LogManager.getLogger(ServiceTest.class); 5 6 @InjectMocks 7 UserInfoController userInfoController; 8 9 @Mock 10 UserInfoService userInfoService; 11 12 @Before 13 public void init() { 14 UserInfo userInfo = initUserInfo(); 15 16 given(userInfoService.insert(any())).willReturn(1); 17 given(userInfoService.selectUnique(any())).willReturn(null, userInfo); 18 19 } 20 21 @Test 22 public void testAdd() { 23 UserInfo userInfo = new UserInfo(); 24 userInfoController.addUserInfo(userInfo); 25 userInfo = initUserInfo(); 26 userInfoController.addUserInfo(userInfo); 27 28 } 29 30 @Test 31 public void getUserInfoTest() { 32 UserInfo userInfo = new UserInfo(); 33 logger.info("测试1*** " + userInfoController.getUserInfo(userInfo)); 34 userInfo.setId(3L); 35 logger.info("测试2*** " + userInfoController.getUserInfo(userInfo)); 36 } 37 38 private UserInfo initUserInfo() { 39 UserInfo userInfo = new UserInfo(); 40 userInfo.setBirthday(new Timestamp(System.currentTimeMillis())); 41 userInfo.setCreateTime(new Timestamp(System.currentTimeMillis())); 42 userInfo.setEducation(5); 43 userInfo.setIdCardCode("********************"); 44 userInfo.setMaritalStatus(1); 45 userInfo.setNickName("社会主义接班人"); 46 userInfo.setPassword(encoderByMd5("a123456")); 47 userInfo.setPhoneNumber("************"); 48 userInfo.setSex(1); 49 userInfo.setStatus(1); 50 userInfo.setUserAddress("hlxj"); 51 userInfo.setUserEmail("**********@qq.com"); 52 userInfo.setUserImage("图片"); 53 userInfo.setUserName("dsc"); 54 55 return userInfo; 56 } 57 58 private String encoderByMd5(String password) { 59 //确定计算方法 60 String md5Password = null; 61 try { 62 MessageDigest md5 = MessageDigest.getInstance("MD5"); 63 BASE64Encoder base64en = new BASE64Encoder(); 64 //加密后的字符串 65 md5Password = base64en.encode(md5.digest(password.getBytes("utf-8"))); 66 logger.info(md5Password); 67 }catch (Exception e){ 68 e.printStackTrace(); 69 } 70 71 return md5Password; 72 } 73}
以上两种只是我的个人测试,由于刚刚开始试验,对于一些细节还不是熟悉,期待日后修改。。。