티스토리 뷰
Mock이란?
Mock은 모의, 가짜의 란 뜻 입니다.
Mock Test는 가짜 객체를 사용해서 테스트 하는 방법입니다.
Mock을 쓰는 이유
예를들어 User라는 Object는 DB에서 값을 불러와서 만들어집니다. 그런데 DB를 연동해서 Test를 하려면 DB컨넥션 맺어야 하고 Jpa의 경우는 Object들을 모두 생성해야 하기 때문에 시간이 오래걸립니다. 그래서 Mock을 씁니다.
given을 쓰는 경우
@ExtendWith(MockitoExtension.class)
class MockTest {
@Mock
private RecordingService recordingService;
@Test
@DisplayName("given일때 어떤 object를 리턴할지 정하기")
void givenTest(){
given(recordingService.get(0l)).willReturn(Optional.of(new Recording(0l, "mock recording object")));
Optional<Recording> recording = recordingService.get(0l);
Assertions.assertEquals("mock recording object", recording.get().getTitle());
}
}
doReturn을 쓰는 경우
아래 코드는 recordingService.list() 를 호출하면 recordings()의 리턴값을 리턴해준다는 뜻 입니다.
private List<Recording> recordings(){
List<Recordings> recordings = new ArrayList<>();
recordings.add(new Recording(0l, "first recording"));
recordings.add(new Recording(1l, "second recording"));
recordings.add(new Recording(2l, "third recording"));
}
@Test
void controllerTest(){
doReturn(recordings()).when(recordingService).list();
List<Recording> recordings = recordingService.list();
Assertions.assertEquals("first recording", recordings.get(0).getTitle());
}
ControllerTest
@ExtendWith(MokitoExtension.class)
class RecordingServiceMockTest {
@Mock
private RecordingService recordingService; // Mock오브젝트 생성
@InjectMocks
private RecordingController recordingController; // @Mock어노테이션 붙은 오브젝트를 넣어줍니다
private MockMvc mockMvc;
@BeforeEach
public void init() {
mockMvc = MockMvcBuilders.standaloneSetup(recordingController).build();
}
private List<Recording> recordings() {
List<Recording> recordings = new ArrayList<>();
recordings.add(new Recording(0l, "first recording"));
recordings.add(new Recording(1l, "second recording"));
recordings.add(new Recording(2l, "third recording"));
return recordings;
}
@Test
@DisplayName("controller test")
void controllerTest() throws Exception {
doReturn(recordings()).when(recordingService).list();
ResultActions resultActions = mockMvc.perform(
MockMvcRequestBuilders.get("/api/v1/recording1/list")
);
MvcResult mvcResult = resultActions.andExpect(status().isOk()).andReturn();
Assertions.assertEquals("[{\"id\":0", mvcResult.getResponse().getContentAsString().substring(0, 8));
}
}
728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- docker container case
- 도커컨테이너
- 도커티슈박스
- 도커티슈케이스
- docker container tissue
- vim
- docker container tissue box
- 2017 티스토리 결산
- Sh
- docker container whale
- 개발자
- shellscript
- 도커각티슈박스
- 이직
- docker container
- 싱가폴
- 도커각티슈케이스
- Linux
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함