zoukankan      html  css  js  c++  java
  • Mockito单元测试实战

      最近使用Mockito完成了几个简单的测试,写个博客mark一下:

      第一种模拟web请求

      

    @SpringBootTest
    @RunWith(SpringRunner.class)
    @WebAppConfiguration //测试环境使用,用来表示测试环境使用的ApplicationContext将是WebApplicationContext类型的;value指定web应用的根
    public class ControllerTest {
        private static final Logger logger = LogManager.getLogger(ControllerTest.class);
    
        @Autowired
        private WebApplicationContext context;
    
        @Mock
        private UserInfoService userInfoService;
    
        private MockMvc mockMvc;
    
        /**
         * 构造MockMvc
         * @throws Exception
         */
        @Before
        public void setupMockMvc() throws Exception {
            // 初始化Mock
            MockitoAnnotations.initMocks(this);
            mockMvc = MockMvcBuilders.webAppContextSetup(context).build();
        }
    
        /**
         * 模拟add请求
         */
        @Test
        public void insertUserInfoTest() {
            UserInfo userInfo = initUserInfo();
            when(userInfoService.insert(any())).thenReturn(1);
            logger.info("++++++++++++++++++++++++++" + userInfo.toString());
            // 调用接口,传入添加的用户参数
            try{
                String response = mockMvc.perform(post("/userInfo/add").contentType(MediaType.APPLICATION_JSON)
                                .content(userInfo.toString()).header("SESSIONNO", "EA60F3C2C7384DBA8A7B8B114474DC12"))
                        .andReturn().getResponse().getContentAsString();
                logger.info("******************" + response);
    
            }catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    
        @Test
        public void addTest() {
            try {
                // 1. controller mvc test
                MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get("/userInfo/add"))
                        .andExpect(MockMvcResultMatchers.handler().handlerType(UserInfoController.class))
                        .andExpect(MockMvcResultMatchers.handler().methodName("addUserInfo"))
    //                    .andExpect(MockMvcResultMatchers.view().name("demo/hello"))
    //                    .andExpect(MockMvcResultMatchers.model().attributeExists("msg"))
                        .andExpect(MockMvcResultMatchers.status().isOk())
                        .andDo(MockMvcResultHandlers.print())
                        .andReturn();
    //            Assert.assertNotNull(result.getModelAndView().getModel().get("msg"));
    
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 模拟update测试
         */
        @Test
        public void updateUserInfo() {
            try{
    //            String response = mockMvc.perform(post("/user/updateUser").contentType(MediaType.APPLICATION_JSON)
    //                            .content(userInfo.toString()).header("SESSIONNO", "EA60F3C2C7384DBA8A7B8B114474DC12"))
    //                    .andReturn().getResponse().getContentAsString();
    //            logger.info("update****" + response);
            }catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        private UserInfo initUserInfo() {
            UserInfo userInfo = new UserInfo();
            userInfo.setBirthday(new Timestamp(System.currentTimeMillis()));
            userInfo.setCreateTime(new Timestamp(System.currentTimeMillis()));
            userInfo.setEducation(5);
            userInfo.setIdCardCode("********************");
            userInfo.setMaritalStatus(1);
            userInfo.setNickName("社会主义接班人");
            userInfo.setPassword(encoderByMd5("a123456"));
            userInfo.setPhoneNumber("************");
            userInfo.setSex(1);
            userInfo.setStatus(1);
            userInfo.setUserAddress("hlxj");
            userInfo.setUserEmail("**********@qq.com");
            userInfo.setUserImage("图片");
            userInfo.setUserName("dsc");
    
            return userInfo;
        }
    
        private String encoderByMd5(String password) {
            //确定计算方法
            String md5Password = null;
            try {
                MessageDigest md5 = MessageDigest.getInstance("MD5");
                BASE64Encoder base64en = new BASE64Encoder();
                //加密后的字符串
                md5Password = base64en.encode(md5.digest(password.getBytes("utf-8")));
                logger.info(md5Password);
            }catch (Exception e){
                e.printStackTrace();
            }
    
            return md5Password;
        }
    }

      第二种模拟web请求

      

    @RunWith(SpringRunner.class)
    public class ServiceTest {
    
        private static final Logger logger = LogManager.getLogger(ServiceTest.class);
    
        @InjectMocks
        UserInfoController userInfoController;
    
        @Mock
        UserInfoService userInfoService;
    
        @Before
        public void init() {
            UserInfo userInfo = initUserInfo();
    
            given(userInfoService.insert(any())).willReturn(1);
            given(userInfoService.selectUnique(any())).willReturn(null, userInfo);
    
        }
    
        @Test
        public void testAdd() {
            UserInfo userInfo = new UserInfo();
            userInfoController.addUserInfo(userInfo);
            userInfo = initUserInfo();
            userInfoController.addUserInfo(userInfo);
    
        }
    
        @Test
        public void getUserInfoTest() {
            UserInfo userInfo = new UserInfo();
            logger.info("测试1*** " + userInfoController.getUserInfo(userInfo));
            userInfo.setId(3L);
            logger.info("测试2*** " + userInfoController.getUserInfo(userInfo));
        }
    
        private UserInfo initUserInfo() {
            UserInfo userInfo = new UserInfo();
            userInfo.setBirthday(new Timestamp(System.currentTimeMillis()));
            userInfo.setCreateTime(new Timestamp(System.currentTimeMillis()));
            userInfo.setEducation(5);
            userInfo.setIdCardCode("********************");
            userInfo.setMaritalStatus(1);
            userInfo.setNickName("社会主义接班人");
            userInfo.setPassword(encoderByMd5("a123456"));
            userInfo.setPhoneNumber("************");
            userInfo.setSex(1);
            userInfo.setStatus(1);
            userInfo.setUserAddress("hlxj");
            userInfo.setUserEmail("**********@qq.com");
            userInfo.setUserImage("图片");
            userInfo.setUserName("dsc");
    
            return userInfo;
        }
    
        private String encoderByMd5(String password) {
            //确定计算方法
            String md5Password = null;
            try {
                MessageDigest md5 = MessageDigest.getInstance("MD5");
                BASE64Encoder base64en = new BASE64Encoder();
                //加密后的字符串
                md5Password = base64en.encode(md5.digest(password.getBytes("utf-8")));
                logger.info(md5Password);
            }catch (Exception e){
                e.printStackTrace();
            }
    
            return md5Password;
        }
    }

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

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 黑色星期五
    Java实现 蓝桥杯VIP 算法训练 比赛安排
    Java实现 蓝桥杯VIP 算法训练 比赛安排
    Java实现 蓝桥杯VIP 算法训练 斜率计算
    Java实现 蓝桥杯VIP 算法训练 斜率计算
    Java实现 蓝桥杯VIP 算法训练 整数平均值
    Java实现 蓝桥杯VIP 算法训练 整数平均值
    控件动态产生器(使用RegisterClasses提前进行注册)
    Delphi编写自定义控件以及接口的使用(做了一个TpgDbEdit)
    Log4delphi使用心得
  • 原文地址:https://www.cnblogs.com/daishoucheng/p/10097838.html
Copyright © 2011-2022 走看看