[워밍업 클럽 2기 BE 클린코드&테스트 코드] 3주차 발자국

image

강의에 대한 리뷰

드디어 기다리던 테스트코드 작성 강의를 수강했다.

강의 내용

테스트 코드 작성법부터, Junit5, TDD, BDD 등 다양하게 배웠다. 중요한 건 테스트하기 좋은 코드와 그렇지 않은 코드를 구분하는 것 이라 생각한다. 나는 이것을 잘하는 게 SOLID 원칙을 지키는 것과 유사하며, 확장성있는 설계, 유지보수하기 쉬운 설계에 가까워진다고 생각한다. 실제로 적용하기에는 많은 연습이 필요하겠지만, 마스터(?)하게 되면 좀 더 좋은 코드를 작성할 수 있다는 것만큼은 확신할 수 있다.

그리고 예제를 중심으로 스프링에서 테스트 코드를 레이어별로 어떻게 쌓아가는 지 알아봤다. 예제는 JPA 기반이었으며, 리포지토리는 새로 추가된 리포지토리만 테스트해봤다. 내가 알기로도 리포지토리 테스트는 @DataJpaTest 가 가볍기 때문에 다들 사용하는 것으로 알고있는데, 우빈님은 선호하지 않는다고 하신다. 그 이유는 뒤에 강의에서 나오는데 통합테스트할 때, 모든 테스트를 실행하게 되면 Spring boot가 너무 여러번 뜨게된다. 이 행위는 시간을 잡아먹기 때문에 비용이다. @DataJpaTest를 사용하면 그 볼륨은 작지만, 다른 레이어를 사용하면서 @SpringBootTest 를 사용했다면, 이미 띄운 서버를 그냥 같이 써버리는 게 훨씬 경제적이라는 맥락이다. 나는 제대로 테스트 코드를 작성해본 적이 없어서 엄청난 공감을 하진 못한다. 써보면서 테스트 비용에 대해 알아가야겠다.

미션

Readable Code에서 했던 예제 중 하나를 선택해서 테스트코드를 작성하는 미션이었다.

나는 스터디카페 이용권 예제를 선택했다. 다음은 테스트를 작성하면서 정리한 내용이다.

테스트 하기 어려운 코드

  • IO 작업을 하는 코드

  • 요구 사항이 변하기 쉬운 코드. ex) 사물함 사용가능한 좌석 이용권

  • ex) 비즈니스 로직에서 사용되는 상수에 따라 결과가 달라지는 코드

테스트 하기 쉬운 코드

  • input과 output이 명확한 코드

  • 의존성을 외부에서 주입할 수 있는 코드

  • 단위가 작은 메서드, 객체

이것도 테스트를 해야하나? 하는 코드

  • 생성자, 정적 팩터리 메서드

  • 단순 getter 메서드

  • 단순 위임 메서드 (위임의 가장 안쪽 클래스는 테스트O)

기타 어려웠던 점

  • DisplayName에 나타낼 테스트명을 작성하는 것이 어려웠음

  • 비즈니스 코드를 리팩터링하고 싶은 코드들이 있었음. 우선 미션 외적인 것이라 생각해 손대지 않음.

 

회고

이번주 강의 내용은 거의 실습위주라 이론적으로 정리할 게 별로 없었다. 조금 달렸던 일주일인 것 같은데, 다른 것도 막 병행하느라 놓친부분이 있진 않을까 걱정된다. 할 건 너무 많은데 이래저래 머리가 복잡하고 마음이 급하다.

커리어를 길게보고 좀 더 여유를 가지자.

댓글을 작성해보세요.

채널톡 아이콘