이번 주는 테스트 코드 작성에 초점이 맞춰져 있다. 테스트 코드 같은 경우 인프런 김영한님의 스프링 강의를 보면서 Given-When-Then
을 작성해보았고(따라 써보았고), 회사에서는 테스트 코드를 작성하는 문화가 없지만, 테스트 코드를 작성해보고 싶어서 개인적으로 회사 프로젝트에 테스트 코드도 작성해보았다. 혼자서 맡은 프로젝트라 가능하지만, 맞게 작성하고 있는지는 몰랐는데 이번 기회에 테스트 코드를 작성해볼 수 있어서 좋았다.
@Getter, @Setter, @NoArgsConstructor, @AllArgsConstructor, @Builder
까지.. 하지만 Lombok이 꼭 좋은 것만은 아니었다. 따라서 @Getter
와 @Setter
만 남기고, @Slf4j
을 통해서 로그를 확인하는 정도로만 사용하였다.. 여태까지 Lombok을 사용하면서 Lombok의 장단점을 주관적으로 느낀 점을 표로 만들어보았다.장점 | 단점 |
---|---|
애노테이션을 사용함으로써 코드가 간결해진다. | 라이브러리 의존성이 강해진다. |
로그를 확인할 수 있다. | Lombok을 사용하기 위한 별도의 설정이 필요하다. |
변수를 변경해도 롬복이 알아서 그에 맞춰 코드를 작성해준다. 예) Getter/Setter | 컴파일 후의 코드가 달라서 개발자가 의도한 대로 실행이 안 될 수 있다. |
굉장히 편하다. | @NoArgsConstructor와 @AllArgsConstructor를 사용하게 되면 추후 치명적인 버그가 생길 가능성이 있다. |
데이터의 모음
을 뜻한다. 아래와 같이 충분히 검증되고 변하지 않는 fixture를 @BeforeEach
메소드에 미리 만들어놓고 이 데이터로 테스트를 작성할 수 있다. Task task = new Task();
task.setTitle(TASK_TITLE);
taskService.createTask(task);
mockMvc.perform(get("/tasks")).andExpect(status().isOk());
JaCoCo : JaCoCo는 Java로 된 코드의 커버리지를 측정하는 라이브러리이다. 과제 Git에서 Fork한 프로젝트와 컴퓨터 환경과 달라서인지 우아한형제들 기술 블로그를 보고 JaCoCo를 다시 설정하였다.
DCI 패턴(Describe-Context-It) : Given-When-Then
대신 Describe-Context-It
패턴을 처음 사용해보았다.
DCI 패턴
은 위와 같이 계층형 구조를 갖는 패턴이다. 계층으로 되어있기 때문에 어떤 테스트가 수행되었고, 어떤 결과를 낳는지 보기 쉽다는 장점이 있다. 다만 MockMvcTest
클래스에서도 @Nested
를 사용해서 DCI 패턴
으로 구현하고 싶었지만, 에러가 발생했다. 이에 관련해서 찾고 있었는데 마침 코드숨 11기이신 분께서 같은 에러에 관한 블로그 글을 작성해주시고 공유해주셨다! -> 스프링부트 버전을 올리면 된다.
Health check : 아래 API는 Health Check
를 위한 API로, 서버 실행이 완료되어 응답받을 수 있는 상태인지 확인하는 용도이다.
@RequestMapping("/")
public String sayHello() {
return "Hello, World!";
}
TaskNotFoundException
과 TitleNotFoundException
모두 RuntimeException
을 상속받도록 구현했다. 이 예외들은 사용자의 입력값에 따라 발생할 가능성이 있는 예외이기 때문에, 컴파일 당시에는 알지 못하고 실행해야 알 수 있으므로 RuntimeException
을 상속받도록 했다.TDD를 많이 들어보았지만 제대로 써본 적은 없었는데 이제 어디 가서 그래도 TDD를 작성해보았다고 말할 수 있을 것 같다. 나중에 프로젝트에도 큰 도움이 될 것 같다. TDD, BDD, DDD.. 배움의 길은 끝이 없다는데, 막막하면서도 끊임없이 지적 재산을 채우고자 하는 갈증을 채울 수 있어서 기쁘다.✍🏻
매주 평일에 하루 정도는 퇴근하고 나서 아무것도 안 하게 되는데 다음 주부터 <구글 엔지니어는 이렇게 일한다> 책 스터디를 하게 되어서 그날에는 스터디 준비를 하면 될 것 같다! 체력을 길러야 할 탠데..🤦🏻♀️