티스토리 뷰
정신없이 개발 하다 보니 human 에러가 발생 했습니다. 별것 아닌 것 처럼 보이지만 심각한 코드가 되겠습니다. 실수는 throw를 빼먹은 것입니다. 문제는 이 코드가 배포가 될뻔 했다는 것입니다.
다음 코드는 회원 가입 할 때 userId가 중복 되었는지 check하는 코드입니다. id로 검색 했을때 존재 한다면 중복되는 것이므로 에러를 발생 시키는 코드 입니다. 하지만 심각한 문제가 있습니다.
userRepository.findByUserId(dto.getUserId())
.ifPresent(user -> new AppException(ErrorCode.DUPLICATED_USER_ID, String.format("%s already in use.", dto.getUserId())));
테스트 중 중복 check이 안되서 회원 가입이 여러번 되는 이슈가 있었습니다. 다음 코드가 맞는 코드 입니다. 어디가 다른지 찾아보시기 바랍니다. ㅎㅎ
userRepository.findByUserId(dto.getUserId())
.ifPresent(user -> {
throw new AppException(ErrorCode.DUPLICATED_USER_ID, String.format("%s already in use.", dto.getUserId()));
});
테스트코드까지 만들고 테스트를 돌린 후 실행 했는데도 문제가 있었다는 것입니다. 테스트가 만능이 아님을 나타내는 예제 이면서도 테스트를 어떻게 만들어야 하는지를 다시한번 생각하게 되는 코드입니다.
이 테스트코드의 문제는 Controller를 Mock 테스트 하는 경우 Test Code에서 에러를 발생시킨다는 것입니다. 다음 코드는 테스트 코드에서 doThrow()를 던집니다. 그러면 이 코드는 테스트 코드가 의미 없는 코드가 될 수 있습니다.
@Test
@WithMockUser
@DisplayName("업데이트 실패(1) - Machine없음")
void failUpdate() throws Exception {
String idMachine = "machineIdabc";
String nameMachine = "*기계1";
// 기계 업데이트 시나리오 - '*기계1'로 이름 변경
MachineUpdateRequestDto dto = MachineUpdateRequestDto.builder()
.idMachine(idMachine)
.nameMachine(nameMachine)
.enabled(false)
.idIotHubDevice("ggg")
.sharedAccessKeySimulation("hhh")
.build();
// MACHINE_NOT_VALID 리턴
doThrow(new AppException(ErrorCode.MACHINE_NOT_VALID))
.when(machineService).updateMachine(any());
mockMvc.perform(put("/api/v1/machines")
.contentType(MediaType.APPLICATION_JSON)
.content(objectMapper.writeValueAsBytes(dto))
.with(csrf())
)
.andExpect(status().isNotAcceptable())
.andExpect(jsonPath("$.result").value(String.format("The machine ID provided is not valid")));
}
앞에 코드를 테스트 하려면 repository자체를 mock하는 테스트를 Controller가 아닌 Service를 테스트 하도록 만들어야 할 것 같습니다.
728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 도커티슈케이스
- 2017 티스토리 결산
- Linux
- shellscript
- vim
- 도커각티슈케이스
- docker container whale
- docker container tissue box
- 도커각티슈박스
- Sh
- 개발자
- 도커티슈박스
- 싱가폴
- docker container case
- docker container
- 이직
- docker container tissue
- 도커컨테이너
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함