TDD로 개발하기 (미완성글)

김소희·2023년 9월 14일
1

TDD로 개발하는 방법을 연습하기 위해서 토이프로젝트를 시작했다.

<MYSQL을 설치했던 상태에서 MariaDB 설치하기>

이번 프로젝트에서는 MYSQL이 아닌 MariaDB를 사용하기로 했는데
MYSQL을 한번 설치한 다음에는 3306포트가 사용중이라 MariaDB설치가 안되서
아래 블로그를 참고해서 설치를 완료했다.
MariaDB 설치방법

<TDD방식에 대한 공부>

인프런에서 실전! 스프링부트 상품-주문 API 개발로 알아보는 TDD 강의를 보면서 코드를 똑같이 타이핑해보기도 하고, 유튜브에서 테스트 코드 적용하기 (JUnit, TDD) 영상을 보면서 타이핑 해보기도 했지만 TDD의 장점도 알고 개념도 알고 방식도 알겠지만, 아직까지 테스트 코드 자체가 익숙하지 않아서인지 선듯 작성할 수가 없었고, 하는 수 없이 컨트롤러의 POST요청 메소드를 먼저 만들고, 단위테스트를 작성해보았다.

    @Test
    public void postQuestionTest() throws Exception {
        // given
        QuestionDto.Post requestBody = new QuestionDto.Post("Sample Title", "Sample Content",
        													Collections.singletonList("Tag1"));
        Question question = mapper.questionPostDtoToQuestion(requestBody);
        question.setId(1);

        given(questionService.createQuestion(any(Question.class))).willReturn(question);

        String content = gson.toJson(requestBody);

        // when
        ResultActions actions = mockMvc.perform(
                post("/questions/{memberId}", 1)
                        .accept(MediaType.APPLICATION_JSON)
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(content)
        );

        // then
        actions
                .andExpect(status().isCreated())
                .andExpect(header().string("Location", is(startsWith("questions/1"))));
    }

그런데 컨트롤러의 DTO의 이름을 바꾼다던가 id를 questionId로 수정하는 등등 코드를 수정할때마다 테스트 코드도 수정해야하는 상황이 빈번히 일어났고, 이렇게 작업하는 것이 효율적이지 않다는 느낌이 들었다. 내가 아직 테스트 코드를 이해하지 못하고 있다는 느낌이 들어서 책도보고 챗GPT한테 물어보기도 하면서 다양한 방식으로 코드를 짜보았다.

<발견했던 gradle 오류와 해결법>

엔티티에 롬북의 @AllArgsConstructor @NoArgsConstructor 생성자를 만들었지만 생성자가 없다는 오류메세지를 봤다.

  • lombok 버전이 1.18.16 이상인 경우, annotationProcessorPaths 에 lombok-mapstruct-binding 을 추가해줘야 한다.
  • 순서에 영향 : 위와 같이 mapstruct 가 lombok 뒤에 오는 경우, target class 에 @Builder 가 있어도 무시하고 생성자 + setter 를 사용하므로 정상적으로 Mapper 클래스를 Generation 하기 위해서 @NoArgsConstructor, @Setter 가 필요하다.(최근 Setter 사용을 지양하는 추세라 선호하지 않는다. mapstruct를 먼저 오도록 해서 @Builder 방식으로 Generation 되도록 하는 것을 개인적으로 추천한다.)
자바 버전롬북버전
191.18.26
181.18.24
171.18.22
111.18.4

팀원은 MacOS 환경에서 작업하고 나는 Windows에서 작업하다보니 Git이 CRLF (Carriage Return Line Feed)과 LF (Line Feed) 줄 끝 표시 사이에 차이를 감지했을 때 발생하는 경고 메시지를 봤었는데 문제가 발생한 파일의 마지막 줄 에서 띄어쓰기를 했다가 지움으로서 해결되었다.

profile
자바 개발자 소희의 노트

0개의 댓글