프로젝트

일반

사용자정보

@SprintBootTest 이용한 제어기 테스트

Prof. Jong Min Lee이(가) 14일 전에 추가함

JUnit5 이용하여 테스트 케이스 만들 때 @SprintBootTest와 @AutoConfigureMockMvc를 애노테이션으로
사용하면 제어기에 대한 테스트도 쉽게 할 수 있습니다.

아래 코드는 첨부한 프로젝트의 SystemControllerTest.java에 있는 코드 일부로 참고하기 바랍니다.


    @Test
    @DisplayName("/login 테스트: id와 암호가 정상인 경우")
    public void testLogin2() throws Exception {
        System.out.println("\n\n===> login2");
        // 실행
        MvcResult result = mvc.perform(post("/login")
                .param("id", "admin")
                .param("password", "admin"))
                // .andDo(print())
                .andExpect(status().isOk())
                .andReturn();

        // 뷰 이름 확인: @GetMapping, @PostMapping의 return 값
        String viewName = result.getModelAndView().getViewName();
        assertTrue(viewName != null);
        assertEquals("main", viewName);

        // 모델 값 확인
        Map<String, Object> model = result.getModelAndView().getModel();
        assertTrue(model != null);

        String userId = (String) model.get("user_id");
        assertTrue(userId != null);
        assertTrue(userId.equals("admin"));
    }

    @Test
    @DisplayName("/login 테스트: id와 암호가 틀린 경우")
    public void testLogin3() throws Exception {
        System.out.println("\n\n===> login3");
        // 실행
        MvcResult result = mvc.perform(
                post("/login")
                        .param("id", "admin")
                        .param("password", "***"))
                // .andDo(print())
                .andExpect(status().isOk())
                .andReturn();

        // 뷰 이름 확인: @GetMapping, @PostMapping의 return 값
        String viewName = result.getModelAndView().getViewName();
        assertTrue(viewName != null);
        assertEquals("fail", viewName);

        // 모델 값 확인
        Map<String, Object> model = result.getModelAndView().getModel();
        assertTrue(model != null);

        String failReason = (String) model.get("fail_reason");
        assertTrue(failReason != null);
        assertTrue(failReason.contains("틀립니다"));
    }

    @Test
    @DisplayName("/misc 테스트")
    public void testMisc() throws Exception {
        System.out.println("\n\n===> misc");
        // 실행
        MvcResult result = mvc.perform(
                get("/misc")
                        .header("user-agent", "123")
                        .param("name", "홍길동")
                        .sessionAttr("loginSuccess", "true"))
                .andDo(print())
                .andExpect(status().isFound())
                .andReturn();

        // 뷰 이름 확인: @GetMapping, @PostMapping의 return 값
        String viewName = result.getModelAndView().getViewName();
        assertTrue(viewName != null);
        assertEquals("redirect:/misc1", viewName);

        // 모델 값 확인
//        Map<String, Object> model = result.getModelAndView().getModel();
//        assertTrue(model != null);
//        String browser = (String)model.get("browser");
//        assertEquals("misc1: 123", browser);

        // RedirectAttribute 값 확인
        FlashMap map = result.getFlashMap();
        // System.out.println(">>>>>>> map = " + map);
        String browser = (String) map.get("browser");

        // 세션 값 확인
        String isOK = (String) result.getRequest().getSession().getAttribute("isOK");
        assertTrue(isOK != null);
        assertEquals("true", isOK);

    }

demo.zip (24.5 KB)