1. 程式人生 > >Mockito單元測試實戰

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;
    }
}

  以上兩種只是我的個人測試,由於剛剛開始試驗,對於一些細節還不是熟悉,期待日後修改。。。