@ExtendWith(MockitoExtension.class)
class ItemRegisterControllerTest {
@InjectMocks
private ItemRegisterController itemRegisterController;
@Mock
private ItemRegisterService itemRegisterService;
private MockMvc mockMvc;
private ItemSaveForm saveForm;
private ItemDTO itemDTO;
ObjectMapper mapper = new ObjectMapper();
@Before
public void initAll(){
mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
}
@BeforeEach
public void initEach(){
mockMvc = MockMvcBuilders.standaloneSetup(itemRegisterController).build();
saveForm = new ItemSaveForm("testItem", 1000);
itemDTO = new ItemDTO("testItem", 1000);
}
@Test
@DisplayName("Item 저장 확인 - Controller")
void saveNewItem() throws Exception {
//given
when(itemRegisterService.saveNewItem(any(ItemEntity.class))).thenReturn(itemDTO);
//when
ResultActions response = mockMvc.perform(post("http://localhost:8080/item/save")
.contentType(MediaType.APPLICATION_JSON)
.content(mapper.writeValueAsString(saveForm)));
//then
response.andExpect(status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.itemName").value("testItem"))
// .andExpect(MockMvcResultMatchers.jsonPath("$.itemPrice", CoreMatchers.is(itemDTO.getItemPrice())))
.andDo(MockMvcResultHandlers.print());
}
}
1. Mockito
- @ Mock: 가짜 객체 만들어줌
- @InjectMock: Mock객체 주입해야 되는 대상에 넣음
- @Spy: 특정 객체의 실제 메소드 호출
2. Mockito Stubbing & BDDMockito
- doReturn(): 가짜 객체가 특정한 값 반환하게 함.
- doNothing(): 아무것도 반환하지 않음(void)
- doThrow(): 예외 발생
- thenReturn(): 실제 메소드를 호출(doReturn()은 실제 메소드를 호출하지 않음)
- veryfy(): 스터빙 검증
- when(): 스터빙 설정
3. BDDMockito
- when() -> given()
- thenReturn() -> willReturn()
- verify() -> then().should()
3. MockMvc 기본
-1. @ExtendWith(MockitoExtension.class)이용
-2. @WebMvcTest
- MockMvc 객체 자동생성
- ControllerAdvice, Filter, Interceptor 등 빈으로 등록
-> 그러나 컨텍스트 캐싱 대신 새로운 컨텍스트 생성 필요하여 느림.
이때, @Mock, @Spy대신 @MockBean, @SpyBean을 사용하여야 함.
4. MockMvc 메소드
- perform(): mock http요청
- get(): GET Method
- post(): post Method
- params(): 파라미터
- andExpect(): 응답 검증
- status(): 상태 검증
- view(): 뷰이름
- content(): 응답 정보
- model(): 모델 정보
예시:
Easy2Exel: https://www.youtube.com/watch?v=XASyDbfQYaw
wedul: https://wedul.site/131
공식 페이지:
출처:
royless9: https://royleej9.tistory.com/entry/Mockito-doReturn-thenReturn
해어린: https://shinsunyoung.tistory.com/52
lxxjn0.log: https://velog.io/@lxxjn0/Mockito%EC%99%80-BDDMockito%EB%8A%94-%EB%AD%90%EA%B0%80-%EB%8B%A4%EB%A5%BC%EA%B9%8C
JaeHoney: https://jaehoney.tistory.com/220
effortguy: https://effortguy.tistory.com/144
'Spring > Testing' 카테고리의 다른 글
AssertJ (0) | 2024.02.01 |
---|---|
HTTP 응답코드 (0) | 2024.02.01 |
스프링 테스트중 에러 (0) | 2024.02.01 |