Mockito单元测试实战

  最近使用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}

  以上两种只是我的个人测试,由于刚刚开始试验,对于一些细节还不是熟悉,期待日后修改。。。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Mockito单元测试实战 - HelloWorld