[워밍업 클럽 2기 BE 클린코드&테스트 코드] 3주차 발자국
강의에 대한 리뷰
드디어 기다리던 테스트코드 작성 강의를 수강했다.
강의 내용
테스트 코드 작성법부터, Junit5, TDD, BDD 등 다양하게 배웠다. 중요한 건 테스트하기 좋은 코드와 그렇지 않은 코드를 구분하는 것 이라 생각한다. 나는 이것을 잘하는 게 SOLID 원칙을 지키는 것과 유사하며, 확장성있는 설계, 유지보수하기 쉬운 설계에 가까워진다고 생각한다. 실제로 적용하기에는 많은 연습이 필요하겠지만, 마스터(?)하게 되면 좀 더 좋은 코드를 작성할 수 있다는 것만큼은 확신할 수 있다.
그리고 예제를 중심으로 스프링에서 테스트 코드를 레이어별로 어떻게 쌓아가는 지 알아봤다. 예제는 JPA 기반이었으며, 리포지토리는 새로 추가된 리포지토리만 테스트해봤다. 내가 알기로도 리포지토리 테스트는 @DataJpaTest
가 가볍기 때문에 다들 사용하는 것으로 알고있는데, 우빈님은 선호하지 않는다고 하신다. 그 이유는 뒤에 강의에서 나오는데 통합테스트할 때, 모든 테스트를 실행하게 되면 Spring boot가 너무 여러번 뜨게된다. 이 행위는 시간을 잡아먹기 때문에 비용이다. @DataJpaTest
를 사용하면 그 볼륨은 작지만, 다른 레이어를 사용하면서 @SpringBootTest
를 사용했다면, 이미 띄운 서버를 그냥 같이 써버리는 게 훨씬 경제적이라는 맥락이다. 나는 제대로 테스트 코드를 작성해본 적이 없어서 엄청난 공감을 하진 못한다. 써보면서 테스트 비용에 대해 알아가야겠다.
미션
Readable Code에서 했던 예제 중 하나를 선택해서 테스트코드를 작성하는 미션이었다.
나는 스터디카페 이용권 예제를 선택했다. 다음은 테스트를 작성하면서 정리한 내용이다.
테스트 하기 어려운 코드
IO 작업을 하는 코드
요구 사항이 변하기 쉬운 코드. ex) 사물함 사용가능한 좌석 이용권
ex) 비즈니스 로직에서 사용되는 상수에 따라 결과가 달라지는 코드
테스트 하기 쉬운 코드
input과 output이 명확한 코드
의존성을 외부에서 주입할 수 있는 코드
단위가 작은 메서드, 객체
이것도 테스트를 해야하나? 하는 코드
생성자, 정적 팩터리 메서드
단순 getter 메서드
단순 위임 메서드 (위임의 가장 안쪽 클래스는 테스트O)
기타 어려웠던 점
DisplayName에 나타낼 테스트명을 작성하는 것이 어려웠음
비즈니스 코드를 리팩터링하고 싶은 코드들이 있었음. 우선 미션 외적인 것이라 생각해 손대지 않음.
회고
이번주 강의 내용은 거의 실습위주라 이론적으로 정리할 게 별로 없었다. 조금 달렸던 일주일인 것 같은데, 다른 것도 막 병행하느라 놓친부분이 있진 않을까 걱정된다. 할 건 너무 많은데 이래저래 머리가 복잡하고 마음이 급하다.
커리어를 길게보고 좀 더 여유를 가지자.
댓글을 작성해보세요.