스프링부트 Junit 컨트롤러 테스트 (MockMvc)

infoqoch·2021년 3월 11일
0

스프링부트

목록 보기
5/10

시작하며..

  • Service 나 Repository에서 테스트를 자주 사용한다. 무척 빠르다. 웹 서버를 로딩하고 브라우저나 데이타베이스 프로그램에서 변경 값을 찾아다닐 필요가 없다. 빠르게 모든 과정을 수행한다.
  • 테스트는 실용적이다. 테스트 코드는 그 다음의 코드가 된다. 그러니까 repository 테스트에서 코드를 완성하고 성공했으면, 해당 코드는 service에서 사용하면 된다. service의 코드도 마찬가지로 controller에서 사용하면 된다.
  • 반면, 컨트롤러는 테스트를 해보지 못했다. 인터넷을 검색해봤고 시도해봤다. 컨트롤러도 테스트가 가능했다. 그리고 그 과정을 공유코자 한다.
@SpringBootTest
@AutoConfigureMockMvc .............(1)
class ReviewControllerTest {
    @Autowired private MockMvc mockMvc;
    @Autowired ReviewController reviewController;

    @BeforeEach...........(2)
    public void beforeEach(){
        mockMvc = MockMvcBuilders.standaloneSetup(reviewController)..........(3)
                .addFilter(new CharacterEncodingFilter("utf-8", true))........(4)
                .alwaysExpect(MockMvcResultMatchers.status().isOk())          
                .build();
    }

    @Test
    public void testGetReviewsByBorrowAndStatusOrderByThings() throws Exception{
                mockMvc.perform(MockMvcRequestBuilders.get("/review/publish/3022/sort/page"))...........(5)
                .andExpect(MockMvcResultMatchers.status().isOk()).........(6)
                .andDo(MockMvcResultHandlers.print());

    }
}

(1) 테스트에 사용할 가상의 WAS 필요로 하다. Mock이 가짜라는 의미를 가지고 있다.
(2) Test를 수행하기에 앞서 WAS를 생성해야 하므로 AOP를 활용한다.
(3) 가상 WAS에 컨트롤러 인스턴스를 주입하여 로딩한다.
(4) 필터를 utf-8로 적용한다.
(5) url을 입력한다. 여기서 반드시 contextPath/ 이후 부터 적어야 한다.
(6) andExpect로 assertThat을 대신한다. andDo로 필요한 데이타가 있으면 추출한다.

참고한 자료는 아래와 같다.
https://siyoon210.tistory.com/145
https://github.com/HomoEfficio/dev-tips/blob/master/Spring%20Test%20MockMvc%EC%9D%98%20%ED%95%9C%EA%B8%80%20%EA%B9%A8%EC%A7%90%20%EC%B2%98%EB%A6%AC.md
https://www.whiteship.me/springboot-no-more-runwith/
https://github.com/ytw9699/Dokky/issues/338

profile
JAVA web developer

0개의 댓글

관련 채용 정보