0925 주특기 프로젝트 ( 프론트 개발 )

song yuheon·2023년 9월 25일
0

Java

목록 보기
39/46
post-thumbnail
post-custom-banner
  1. 어제 만든 코드에 대한 테스트 코드 작성
@Controller
public class UserWebController {

    @GetMapping("/user/signup")
    public String signupPage() {
        return "/user/signup";
    }

    @GetMapping("/user/login")
    public String loginPage() {
        return "/user/login";
    }

    @GetMapping("/user/update")
    public String updatePage() {
        return "/user/update";
    }

    @GetMapping("/user/escape")
    public String escapePage() {
        return "/user/escape";
    }

}
  • UserWebController는 주어진 경로에 대해 특정 뷰 페이지를 리턴하는 역할을 한다.
    테스트를 작성하는 목적은 주로 해당 메소드가 예상대로 작동하는지 확인하는 것이다.
    따러서 여기선 각 메소드가 호출되었을 때 해당하는 문자열(뷰 이름)을 리턴하는지만 확인하면 된다.

->

@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
@AutoConfigureMockMvc(addFilters = false)
@SpringBootTest
class UserWebControllerTest {
    @Autowired
    private MockMvc mockMvc;
    @Test
    void signupPage() throws Exception {
        mockMvc.perform(get("/user/signup"))
                .andExpect(status().isOk())
                .andExpect(view().name("/user/signup"))
                .andDo(print());
    }

    @Test
    void loginPage() throws Exception {
        mockMvc.perform(get("/user/login"))
                .andExpect(status().isOk())
                .andExpect(view().name("/user/login"))
                .andDo(print());
    }

    @Test
    void updatePage() throws Exception {
        mockMvc.perform(get("/user/update"))
                .andExpect(status().isOk())
                .andExpect(view().name("/user/update"))
                .andDo(print());
    }

    @Test
    void escapePage() throws Exception {
        mockMvc.perform(get("/user/escape"))
                .andExpect(status().isOk())
                .andExpect(view().name("/user/escape"))
                .andDo(print());
    }
}
  • mainController 테스트 코드 작성
@Controller
@RequiredArgsConstructor
public class MainController {
    private final BoardService boardService;
    @GetMapping("/")
    public String index(Model model) {
        List<BoardReadAllResponseDto> boards = boardService.readAllBoard();
        model.addAttribute("boards", boards);
        model.addAttribute("message", "Thymeleaf를 사용한 Spring 웹서비스");
        return "/main";

    }

    @GetMapping("/board/{boardId}")
    public String getBoard(@PathVariable Long boardId, Model model) {
        BoardReadAllResponseDto boardSearchList = boardService.readChoiceBoard(boardId);
        model.addAttribute("boardData", boardSearchList);

        return "/board/boardView";  // boardView.html로 이동
    }

}
  • 테스트 코드
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
@SpringBootTest
@AutoConfigureMockMvc(addFilters = false)
class MainControllerTest {
    @Autowired
    private MockMvc mockMvc;
    @Test
    void index() throws Exception {
        mockMvc.perform(get("/"))
                .andExpect(status().isOk())
                .andExpect(view().name("/main"))
                .andDo(print());
    }

    @Test
    void getBoard() throws Exception {
        mockMvc.perform(get("/board/{boardId}", 1L ))
                .andExpect(status().isOk())
                .andExpect(view().name("/board/boardView"))
                .andDo(print());
    }
}
  1. main페이지 재구축 html(login, sign제거 + logout 버튼 추가 )
  • logout controller 추가 캐시 삭제 기능 추가
    main에 logout 버튼 생성

userWebController에서 로그아웃 매핑
쿠키 삭제 기능 + "/"(login 페이지로 이동 )

    @GetMapping("/user/logout")
    public String logout() {
        /**
         * 쿠키 삭제 기능 추가
         */
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletResponse response = attributes.getResponse();
        Cookie cookie = new Cookie("Authorization", null);
        cookie.setMaxAge(0);
        cookie.setPath("/");
        response.addCookie(cookie);



        return "/";
    }

트러블 슈팅: Thymeleaf 템플릿 오류 해결

profile
backend_Devloper
post-custom-banner

0개의 댓글