티스토리 뷰
728x90
1. 기본적인 get, post, put을 위한 MockMvc 테스트 템플릿이다.
2. 이걸 붙여 놓는 이유는 VSCode는 자동으로 static 메소드를 임포트 하는 기능이 좋지 않아 클래스 이름을 기억하기 힘들기 때문이다.
3. 기본적인 내용
3-1 JUnit 5 버전은 @ExtendWith를 사용해야 하고 MockitoExtention을 사용해야 BDDMockito문법을 사용할 수 있다.
3-2 사용을 원하는 fixture는 @MockBean을 붙여서 지정한다.
3-3 MockMvc는 @Autowired로 가져온다.
package pe.pilseong.some.web.controller;
import static org.hamcrest.CoreMatchers.is;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.BDDMockito.given;
import static org.mockito.BDDMockito.then;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import java.util.UUID;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension;
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.http.MediaType;
import org.springframework.test.web.servlet.MockMvc;
import pe.pilseong.some.web.model.SomeDto;
import pe.pilseong.some.web.service.SomeService;
@ExtendWith(MockitoExtension.class)
@WebMvcTest(SomeController.class)
public class SomeControllerTest {
@MockBean
SomeService someService;
@Autowired
MockMvc mockMvc;
@Autowired
ObjectMapper objectMapper;
SomeDto someDto;
@BeforeEach
public void setup(){
someDto = SomeDto.builder().id(UUID.randomUUID())
.someName("some1")
.someStyle("someStyle1")
...
.build();
}
@Test
public void getSomeById() throws Exception {
if (this.someService == null || this.mockMvc == null) {
System.out.println("null");
}
given(someService.getSomeById(any(UUID.class))).willReturn(this.someDto);
mockMvc.perform(get("/api/some/" + this.someDto.getId().toString()).accept(MediaType.APPLICATION_JSON))
.andExpect(status().isOk())
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
.andExpect(jsonPath("$.id", is(this.someDto.getId().toString())))
.andExpect(jsonPath("$.someName", is("Some1")));
}
@Test
public void saveSome() throws Exception {
SomeDto some = this.someDto;
some.setId(null);
SomeDto saveDto = SomeDto.builder().id(UUID.randomUUID()).someName("Some2").build();
String someDtoJson = objectMapper.writeValueAsString(some);
given(someService.saveSome(any())).willReturn(saveDto);
mockMvc.perform(post("/api/some").contentType(MediaType.APPLICATION_JSON)
.content(someDtoJson))
.andExpect(status().isCreated());
}
@Test
public void updateSome() throws Exception {
SomeDto some = this.someDto;
String someDtoJson = objectMapper.writeValueAsString(some);
mockMvc.perform(put("/api/some/" + someDto.getId())
.contentType(MediaType.APPLICATION_JSON).content(someDtoJson))
.andExpect(status().isNoContent());
then(someService).should().updateSome(any(), any());
}
}
728x90
'Spring > Spring Test' 카테고리의 다른 글
Spring Test : Spring REST 유닛 테스트 (0) | 2020.09.03 |
---|---|
Spring Test : WebFlux Unit Test (0) | 2020.08.31 |
Spring Test : Embedded MongoDB 통합테스트 시 connection closed (0) | 2020.08.30 |
Spring Test : Repository Integration Test with @RunWith, @Mongo (0) | 2020.08.21 |
Spring Test : 테스트 시 인자로 any or 특정 값? (0) | 2020.08.05 |
댓글
250x250
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
- 도커 개발환경 참고
- AWS ARN 구조
- Immuability에 관한 설명
- 자바스크립트 멀티 비동기 함수 호출 참고
- WSDL 참고
- SOAP 컨슈머 참고
- MySql dump 사용법
- AWS Lambda with Addon
- NFC 드라이버 linux 설치
- electron IPC
- mifare classic 강의
- go module 관련 상세한 정보
- C 메모리 찍어보기
- C++ Addon 마이그레이션
- JAX WS Header 관련 stackoverflow
- SOAP Custom Header 설정 참고
- SOAP Custom Header
- SOAP BindingProvider
- dispatcher 사용하여 설정
- vagrant kvm으로 사용하기
- git fork, pull request to the …
- vagrant libvirt bridge network
- python, js의 async, await의 차이
- go JSON struct 생성
- Netflix Kinesis 활용 분석
- docker credential problem
- private subnet에서 outbound IP 확…
- 안드로이드 coroutine
- kotlin with, apply, also 등
- 안드로이드 초기로딩이 안되는 경우
- navigation 데이터 보내기
- 레이스 컨디션 navController
- raylib