@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 |