IT/development

[Spring]spring 프레젠테이션(웹)계층의 CRUD 구현 시 MockTest

알 수 없는 사용자 2022. 11. 27. 07:13
반응형

목차

    MockTest

    과거에는 view페이지를 만든 뒤 Tomcat을 실행하고 웹 페이지에서 결과를 확인하는 방식의 코드를 작성해 왔는데, 이 방식은 시간도 오래 걸리고 테스트를 자동화 하기에도 어려움이 많아서 Mock을 이용해서 Controller를 테스트 하는 방식이 있음
    MockMvc는 말 그대로 '가짜 mvc'라고 생각하면 되고, 가짜로 URL과 parameter 등을 브라우저에서 사용하는 것처럼 만들어서 Controller를 실행 해 볼 수 있음

    우선 아래처럼 BoardController에서 게시글 전체 목록을 가져오는 예제 코드를 작성함

    그 다음 아래 이미지처럼 테스트 코드는 웹을 개발할 때 매번 URL을 테스트 하기 위해 Tomcat을 실행하는 불편한 단계를 생략하기 위해서 기존과 다르게 작성

    @WebAppConfiguration 어노테이션은 Servlet의 ServletContext를 이용하기 위해서인데, 스프링에서는 WebApplicationContext라는 존재를 이용하기 위해서임

    @Before 어노테이션이 적용된 method는 모든 테스트 전에 매번 실행되는 method가 됨, @Before는 import 시 jUnit을 이용해야 함
    MockMvcRequestBuilders라는 존재를 이용해서 GET 방식의 호출을 하고 이후에는 BoardController의 getList()에서 반환된 결과를 이용해서 model에 담겨진 데이터들을 확인함

    아래는 jUnit으로 테스트 한 결과값임, model에 담긴 값이 정상적으로 확인 됨

    MockMvc를 이용해서 parameter의 값을 전달해야 하는 경우에는 아래와 같이 처리함(parameter의 값 전달 시 문자열로만 처리해야 함
    아래는 BoardController의 내용

    url Mapping을 "/board/register"로 하고 parameter로 BoardVO 객체, bno의 값도 전달하기 위해서 RedirectAttributes객체를 받았다

    아래는 위의 resister() method를 테스트 하기 위한 테스트 코드임
    MockMvcRequestBuilders.post().param("name", "value")이런식으로 추가하면 됨

    위의 테스트 코드를 실행한 결과값은 아래와 같음

    아래 이미지처럼 실제로 DB에도 정상적으로 등록이 된것을 확인 할 수 있음

     

    출처: 코드로 배우는 스프링 웹 프로젝트(개정판)

     

    반응형