ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory.