본문 바로가기

공부/Spring

[Boot] @WebMvcTest

@WebMvcTest

MVC를 위한 테스트. 웹에서 테스트하기 힘든 컨트롤러를 테스트하는데 적합함

  • 웹상에서 요청과 응답에 대해 테스트할 수 있음
  • 시큐리티 혹은 필터까지 자동으로 테스트하며 수동으로 추가/삭제까지 가능함
  • MVC관련 설정인 @Controller, @ControllerAdvice, @JsonComponent와 Filter, WebMvcConfigurer, HandlerMethodArgumentResolver만 로드됨

테스트

import com.soon.domain.Book;
import com.soon.service.BookService;
import org.hamcrest.Matchers;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.BDDMockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;

import java.time.LocalDateTime;
import java.util.Collections;

@RunWith(SpringRunner.class)
@WebMvcTest(BookController.class)
public class BookControllerTests {

    @Autowired
    private MockMvc mvc;
    
    @MockBean
    private BookService bookService;

    @Test
    public void bookTest() throws Exception {
        Book book = new Book("스프링 부트 테스트 책", LocalDateTime.now());

        //
        BDDMockito.given(bookService.getBookList()).willReturn(Collections.singletonList(book));

        mvc.perform(MockMvcRequestBuilders.get("/books"))
                // HTTP 상태값이 200인지 테스트
                .andExpect(MockMvcResultMatchers.status().isOk())

                // 반환되는 뷰의 이름이 'book' 인지 테스트
                .andExpect(MockMvcResultMatchers.view().name("book"))

                // 모델의 프로퍼티 중 'bookList' 라는 프로퍼티가 존재하는지 테스트
                .andExpect(MockMvcResultMatchers.model().attributeExists("bookList"))

                // 모델의 프로퍼티 중 'bookList' 라는 프로퍼티에 book 객체가 담겨져 있는지 테스트
                .andExpect(MockMvcResultMatchers.model().attribute("bookList", Matchers.contains(book)));
    }
}
  • @Service 어노테이션은 @WebMvcTest의 적용대상이 아님
  • 목 객체 = 가짜 객체


'공부 > Spring' 카테고리의 다른 글

[Boot] 의존 설정  (0) 2019.03.11
[Boot] 스프링 부트 배치  (0) 2019.03.11
[Boot] @SpringBootTest  (0) 2019.02.15
[AvtiveMQ] 정리  (0) 2019.02.10
[Boot] 환경설정 관련  (0) 2019.02.10