Mockito一些简单的Junit测试用例

    xiaoxiao2024-12-05  50

    package compaskenapi.compaskenlearn.junit.test.controller; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; import compaskenapi.compaskenlearn.ComPaskenLearnApplicationTests; import compaskenapi.compaskenlearn.junit.test.entity.User; import compaskenapi.compaskenlearn.junit.test.param.UserRequestBodyParam; import compaskenapi.compaskenlearn.junit.test.service.UserService; import lombok.extern.slf4j.Slf4j; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import java.util.Date; import static org.mockito.Mockito.when; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; /** * 更详细请参考:https://blog.csdn.net/xiao_xuwen/article/details/52890730 * 整个测试过程非常有规律: * 1、准备测试环境 * 2、通过MockMvc执行请求 * 3.1、添加验证断言 * 3.2、添加结果处理器 * 3.3、得到MvcResult进行自定义断言/进行下一步的异步请求 * 4、卸载测试环境 * * @author pasken * @date on 2019/5/26. */ @Slf4j public class UserControllerTest extends ComPaskenLearnApplicationTests { @Mock private UserService userService; @Test public void testView() throws Exception { MvcResult result = mockMvc.perform(MockMvcRequestBuilders.get("/user/1")) .andExpect(view().name("user/view")) .andExpect(model().attributeExists("user")) .andDo(print()) .andReturn(); Assert.assertNotNull(result.getModelAndView().getModel().get("user")); } /** * 测试 ModelAndView * * @throws Exception */ @Test public void test() throws Exception { //测试普通控制器 mockMvc.perform(get("/user/{id}", 1)) //执行请求 .andExpect(model().attributeExists("user")) //验证存储模型数据 .andExpect(view().name("user/view")) //验证viewName .andExpect(forwardedUrl("/WEB-INF/jsp/user/view.jsp"))//验证视图渲染时forward到的jsp .andExpect(status().isOk())//验证状态码 .andDo(print()); //输出MvcResult到控制台 } /** * 测试 PathVariable * * @throws Exception */ @Test public void testPathVariable() throws Exception { //测试普通控制器 MvcResult result = mockMvc.perform( get("/user/testPathVariable/{id}", 1) //执行请求 .accept(MediaType.APPLICATION_JSON) .param("name", "zhangsan") .param("password", "123456") ) .andExpect(status().isOk())//验证状态码 .andDo(print())//输出MvcResult到控制台 .andReturn(); // 获取方法的返回值 String responseContent = result.getResponse().getContentAsString(); log.info("testPathVariable result>>[{}]", responseContent); } /** * 测试 RequestParam * * @throws Exception */ @Test public void testRequestParam() throws Exception { MvcResult result = mockMvc.perform( get("/user/testRequestParam") .accept(MediaType.APPLICATION_JSON) .param("name", "zhangsan") .param("password", "123456") ) .andDo(print()) .andExpect(status().isOk()) .andReturn(); // 获取方法的返回值 String responseContent = result.getResponse().getContentAsString(); log.info("testRequestParam result>>[{}]", responseContent); } /** * 测试 RequestBody * * @throws Exception */ @Test public void testRequestBody() throws Exception { UserRequestBodyParam userRequestBodyParam = UserRequestBodyParam.build("李四", "456789", 25); String requestJson = getRequestJson(userRequestBodyParam); MvcResult result = mockMvc.perform( post("/user/testRequestBody") //注意类型 .contentType(MediaType.APPLICATION_JSON_UTF8) .content(requestJson) ) .andDo(print()) .andExpect(status().isOk()) .andReturn(); // 获取方法的返回值 String responseContent = result.getResponse().getContentAsString(); log.info("testUserRequestBody result>>[{}]", responseContent); } /** * @param param * @return * @throws JsonProcessingException * @RequestBody请求对象的json */ private String getRequestJson(Object param) throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); ObjectWriter ow = mapper.writer().withDefaultPrettyPrinter(); return ow.writeValueAsString(param); } @Before public void buildUser() { User mockUser = new User(); mockUser.setName("john"); mockUser.setId(1L); mockUser.setCreateDate(new Date()); //使用when().thenReturn()方法指定测试接口中某方法的返回值 when(userService.findOne(1L)).thenReturn(mockUser); } @Test public void findOneTest() { User user = userService.findOne(1L); log.info("user.name = {}", user.getName()); Assert.assertEquals(user.getName(), "john"); } } =============================================================== controller =============================================================== package compaskenapi.compaskenlearn.junit.test.controller; import compaskenapi.compaskenlearn.junit.test.entity.User; import compaskenapi.compaskenlearn.junit.test.param.UserRequestBodyParam; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; import java.util.HashMap; import java.util.Map; @Controller @RequestMapping("/user") @Slf4j public class UserController { @RequestMapping("/{id}") public ModelAndView view(@PathVariable("id") Long id) { User user = new User(); user.setId(id); user.setName("zhang"); ModelAndView mv = new ModelAndView(); mv.addObject("user", user); mv.setViewName("user/view"); return mv; } @GetMapping("/testPathVariable/{id}") @ResponseBody public Map<String, Object> testPathVariable(@PathVariable("id") Long id) { Map<String, Object> data = new HashMap(3); User user = new User(); user.setId(id); user.setName("testPathVariable"); data.put("testPathVariable", "testPathVariable"); data.put("id", id); data.put("user", user); return data; } @RequestMapping("/testRequestParam") @ResponseBody public Map<String, Object> testRequestParam(@RequestParam String name, @RequestParam String password) { Map<String, Object> data = new HashMap(3); data.put("testRequestParam", "testRequestParam"); data.put("name", name); data.put("password", password); return data; } @PostMapping("/testRequestBody") @ResponseBody public Map<String, Object> testRequestBody(@RequestBody UserRequestBodyParam param) { Map<String, Object> data = new HashMap(3); data.put("testRequestBody", "testRequestBody"); data.put("UserRequestBodyParam", param); return data; } } =============================================================== User =============================================================== package compaskenapi.compaskenlearn.junit.test.entity; import lombok.Data; import lombok.extern.slf4j.Slf4j; import java.io.Serializable; import java.util.Date; /** * @author pasken * @date on 2019/5/26. */ @Slf4j @Data public class User implements Serializable { private Long id; private String name; private Date createDate; } =============================================================== UserRequestBodyParam =============================================================== package compaskenapi.compaskenlearn.junit.test.param; import lombok.AllArgsConstructor; import lombok.Data; import lombok.experimental.Accessors; import lombok.extern.slf4j.Slf4j; import java.io.Serializable; /** * @author pasken * @date on 2019/5/26. */ @Slf4j @Data @Accessors(chain = true) @AllArgsConstructor(staticName = "build") public class UserRequestBodyParam implements Serializable { private String name; private String password; private int age; }

     

    最新回复(0)