TDD로 개발하는 방법을 연습하기 위해서 토이프로젝트를 시작했다.
이번 프로젝트에서는 MYSQL이 아닌 MariaDB를 사용하기로 했는데
MYSQL을 한번 설치한 다음에는 3306포트가 사용중이라 MariaDB설치가 안되서
아래 블로그를 참고해서 설치를 완료했다.
MariaDB 설치방법
인프런에서 실전! 스프링부트 상품-주문 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한테 물어보기도 하면서 다양한 방식으로 코드를 짜보았다.
엔티티에 롬북의 @AllArgsConstructor @NoArgsConstructor 생성자를 만들었지만 생성자가 없다는 오류메세지를 봤다.
자바 버전 | 롬북버전 |
---|---|
19 | 1.18.26 |
18 | 1.18.24 |
17 | 1.18.22 |
11 | 1.18.4 |
팀원은 MacOS 환경에서 작업하고 나는 Windows에서 작업하다보니 Git이 CRLF (Carriage Return Line Feed)과 LF (Line Feed) 줄 끝 표시 사이에 차이를 감지했을 때 발생하는 경고 메시지를 봤었는데 문제가 발생한 파일의 마지막 줄 에서 띄어쓰기를 했다가 지움으로서 해결되었다.