-
TDD 방식으로 아이디 중복 체크 API 개발하기Java/TDD 2020. 5. 18. 00:09
■개요
풋살모임 관리 앱을 개발중에 회원 아이디 중복 체크용 API가 필요한 상황이 생겼다
TDD 방식으로 개발하는 과정을 포스팅해보려고 한다
■테스크 코드 작성
1. 성공 케이스
- 아이디가 중복되는 경우(false)
- 아이디가 중복되지 않는 경우(true)
2. 실패 케이스
- 아이디를 기입하지 않은 경우
간단한 기능이라 그런지 실패 케이스가 1개밖에 떠오르지 않았다
먼저 성공 케이스 2가지를 작성했다
@Test
@TestDescription("아이디 중복조회_false")
public void isAlreadyExistId_false() throws Exception {
String[] paramList = new String[]{"testUserNew"};
// request
ResultActions result = mockMvc.perform(
super.getRequest("/api/member/isAlreadyExistId/{id}",paramList)
.accept(MediaType.APPLICATION_JSON_VALUE)
);
// result
result.andExpect(status().isOk())
.andDo(print())
.andExpect(jsonPath("isAlreadyExistId").value("false"))
.andDo(document("isAlreadyExistId",
pathParameters(
parameterWithName("id").description("아이디")
),
responseFields(
fieldWithPath("isAlreadyExistId").description("아이디 중복여부").type(JsonFieldType.BOOLEAN)
)
));
}
@Test
@TestDescription("아이디 중복조회_true")
public void isAlreadyExistId_true() throws Exception {
String[] paramList = new String[]{"testUser"};
// request
ResultActions result = mockMvc.perform(
super.getRequest("/api/member/isAlreadyExistId/{id}",paramList)
.accept(MediaType.APPLICATION_JSON_VALUE)
);
// result
result.andExpect(status().isOk())
.andDo(print())
.andExpect(jsonPath("isAlreadyExistId").value("true"))
.andDo(document("isAlreadyExistId",
pathParameters(
parameterWithName("id").description("아이디")
),
responseFields(
fieldWithPath("isAlreadyExistId").description("아이디 중복여부").type(JsonFieldType.BOOLEAN)
)
));
}response에 대한 문서를 spring rest docs로 자동으로 생성하도록 했다.
테스트 코드만 작성하면 api 문서가 자동으로 생성되서 굉장히 편하다.
테스트를 실행시켜봤다
java.lang.AssertionError: Status
Expected :200
Actual :404예상대로 아주 잘 실패한다
실패 테스트코드도 만들었다
@Test
@TestDescription("아이디 중복조회 실패(필수 파리미터 미기입)")
public void isAlreadyExistId_badRequest_emptyRequest() throws Exception {
String[] paramList = new String[]{""};
// request
ResultActions result = mockMvc.perform(
super.getRequest("/api/member/isAlreadyExistId/{id}",paramList)
.accept(MediaType.APPLICATION_JSON_VALUE)
);
// result
result.andExpect(status().isNotFound())
.andDo(print());
}아주 잘 실패한다
그런데 짜고보니 실패에 대한 문서화는 어떻게 할까 궁금해졌다
doc문서로 직접 작성하려면 노가다해볼 순 있겠는데 restdocs에서 실패에 대한 문서화는
어떻게 할지 찾아봐야겠다
이제 api를 실제로 만들어볼 차례다
■api 생성
/**
* 회원 id 중복 체크
*/
@GetMapping(value = "/api/member/isAlreadyExistId/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Map<String, Object>> isAlreadyExistId(@PathVariable String id) {
Member member = memberService.getMemberById(id);
Map<String, Object> returnMap = new HashMap<>();
returnMap.put("isAlreadyExistId", Objects.nonNull(member));
return ResponseEntity.ok().body(returnMap);
}api 중복 체크용 api를 만들었다
다시 테스트코드를 돌려봤다
빨갛게 표시한 세 테스트가 아주 잘 통과됐다
api만 만들면 금방 만들었겠지만
테스트코드를 작성함으로써 앞으로 있을 리팩토링이 두렵지 않게 되어 좋다 ㅎㅎ
'Java > TDD' 카테고리의 다른 글
TDD를 끊지 못하는 이유(초짧음) (0) 2023.07.14 TDD에 대해서 (0) 2020.01.27 댓글