Spring Boot Junit 유닛 테스트 MockMvc 사용 (MockHttpServletRequestBuilder MvcResult Model AndView json)

6040 단어 코드 노트
프로젝트 에 서 는 MockMvcRequestBuilders 라 는 종 류 를 사용 하여 유닛 테스트 를 실현 합 니 다.
이 예 를 들 어 get 과 post 는 쿠키, 인자, 대상, 폼 제출, url 경로 제출 을 요청 합 니 다.
@ ModelAttribute, @ RequestBody 전송 대상
반환 대상 MockHttpServletRequestBuilder 가 져 오기  MvcResult  ModelAndView, 보기 / json / 문자열 분석 되 돌려 주기
일부러 필 기 를 하 는 것 도 나중에 복습 하 는 데 편리 하 다.
유닛 테스트 상자 에 필요 한 주입 이 있어 야 작은 프레임 이 나 옵 니 다.
@RunWith(SpringRunner.class)
@SpringBootTest
public class domeTest {
    @Autowired
    private WebApplicationContext context;

    protected MockMvc mvc;

    @Before
    public void setUp() {
        mvc = MockMvcBuilders.webAppContextSetup(context).build();
    }

    @Test
    public void doem() {
    }

}

1. 각종 요청 참여
        //      

        //post  
        MockHttpServletRequestBuilder post = MockMvcRequestBuilders.post("/test");
        //get  
        MockHttpServletRequestBuilder get = MockMvcRequestBuilders.get("/test");

        //post       Cookie
        MockHttpServletRequestBuilder post_cookie = MockMvcRequestBuilders.post("/test")
                .cookie(new Cookie("cookieName","value"));//      
        //get        Cookie
        MockHttpServletRequestBuilder get_cookie = MockMvcRequestBuilders.post("/test")
                .cookie(new Cookie("cookieName","value"));//      

        //post       session
        MockHttpServletRequestBuilder post_cookie_session = MockMvcRequestBuilders.post("/test")
                .sessionAttr("sessionName","value");
        //get       session
        MockHttpServletRequestBuilder get_cookie_session = MockMvcRequestBuilders.get("/test")
                .sessionAttr("sessionName","value");


        //post       Cookie       
        //           @ModelAttribute("formName")    form    
        //  :
        //    @PostMapping("/submitOrder")
        //    public ModelAndView submitOrder (@ModelAttribute("orderForm") ServiceProductOrder serviceProductOrder)
        MockHttpServletRequestBuilder post_cookie_par = MockMvcRequestBuilders.post("/test")
                .cookie(new Cookie("cookieName","value"))//      
                .param("userName","admin")// @RequestParam      ,        input   name       value
                .param("pass","admin");// @ModelAttribute           

        //get        Cookie          (     )
        MockHttpServletRequestBuilder get_cookie_par_one = MockMvcRequestBuilders.post("/test")
                .cookie(new Cookie("cookieName","value"))//      
                // @RequestParam      ,        input   name       value
                .param("userName","admin")
                .param("pass","admin");
        //get        Cookie          (url    )
        MockHttpServletRequestBuilder get_cookie_par_two = MockMvcRequestBuilders.post("/test?userName=admin&pass=admin")
                .param("pass","admin");


        //post       Cookie
        //    :  @RequestBody      
        //  :@PostMapping("/submitOrder")
        //     public ModelAndView submitOrder (@RequestBody ServiceProductOrder serviceProductOrder) {
        Admin  admin=new Admin();
        admin.setLoginName("admin");
        admin.setLoginPassword("admin");//         .
        MockHttpServletRequestBuilder post_cookie_obj = MockMvcRequestBuilders.post("/test")
                .cookie(new Cookie("cookieName","value"))//      
                .contentType(MediaType.APPLICATION_JSON).content(JSONObject.toJSONString(admin));//     json   

        //MultipartFile      
        String filename = "images/sy_02.png";//    
        InputStream inStream = getClass().getClassLoader().getResourceAsStream(filename);
        MockMultipartFile mfile = new MockMultipartFile("file", "sy_02.png", "png", inStream);
        MockMultipartHttpServletRequestBuilder file = MockMvcRequestBuilders.multipart("/file/upload").file(mfile);

 2. 각종 요청 응답 처리
          MockHttpServletRequestBuilder(     MockMultipartHttpServletRequestBuilder)  ,             ,         RequestBuilder

 
       //          MvcResult    (mvc    ,            )
       //request   MockHttpServletRequestBuilder 
        MvcResult mvcResult = mvc.perform(request).andReturn();

        //     
        int status = mvcResult.getResponse().getStatus();//500     302     404    200    
        //     @ResponseBody json    :           
        //  : 500/400/302     HTML  String  
        String contentAsString = mvcResult.getResponse().getContentAsString();

        //  ModelAndView           
        //  : model.setViewName("/index");
        ModelAndView mv = mvcResult.getModelAndView();
        String  url=mv.getViewName(); //  /index

        //  ModelAndView      state  
        // model.addObject("state", 1);
        ModelAndView mv = mvcResult.getModelAndView();
        Map model = mv.getModel();
        Integer state = (Integer) model.get("state");

        //  ModelAndView         /map/  
        // PageInfo list=new PageInfo<>();
        // model.addObject("AdminList", list);
        ModelAndView mv1 = mvcResult.getModelAndView();
        Map model1 = mv1.getModel();
        ((PageInfo) model1.get("AdminList")).getList().size();//  list  

ps: 돌아 오 는 제 이 슨 문자열 은 개인 적 으로 JSONobject 로 바 꾸 는 것 을 좋아 합 니 다. 게다가 Assert 단언 으로 사용 하 는 것 도 편리 합 니 다.
JSONObject jsonObject = JSONObject.parseObject(jsonString);
Assert.assertEquals(0,jsonObject.getIntValue("code"));

코드 를 쓸 때 넘 긴 자료:
Junit 테스트 컨트롤 러 (MockMVC 사용), 전송 @ RequestBody 데이터 해결 방법

좋은 웹페이지 즐겨찾기