
워밍업 클럽 4기 BE 클린코드 4주차 발자국
4주차를 마무리하며...
워밍업 클럽의 마지막 주에는 테스트 강의를 마무리하는 시간이 였습니다. 그리고 마지막 점검을 통해 제가 놓치고 있는 테스트의 시야를 넓혀주는 시간을 보냈습니다. ^^
✅ 하나의 테스트에는 하나의 목적의 검증만!
테스트 코드는 문서의 역할을 하기도 합니다.
이를 글쓰기 관점에서 보았을때, 한문단에 하나의 주제만 쓰는것이 전달하기에 명료한 것과 같이 볼 수 있습니다.
반복문과 분기문(논리구조)은 되도록 안 쓰는 테스트가 좋습니다.
✅ 테스트에 대한 환경은 완벽하게 제어
제어 가능한 영역과 불가능한 영역을 구분하여 테스트 코드를 작성하는 것이 좋습니다.
외부 시스템 같은 경우 mock객체를 사용합니다.
✅ 테스트 환경의 독립성을 보장
하나의 테스트에서는 하나의 행위에 대한 내용으로 작성하는 것이 좋습니다.
두가지의 행위가 혼합되어진 테스트인 경우에는 읽는이가 논리적으로 한번 더 생각해야 하고, 주 목적에 맞지 않는 이유로 테스트의 목적을 보장할 수 없게됩니다.
✅ 테스트 간 독립성을 보장
테스트 코드간은 서로 독립되어 동작해야 합니다.
테스트 간에 순서가 생기면 안됩니다.
공유 변수나 영향을 주는 persistence는 제거!
사용해야하는 상황에서는 dynamic test 사용합시다.
✅ Test Fixture 구성
Fixture: 고정물, 고정되어 있는 물체, 테스트를 위해 원하는 상태로 고정시킨 일련의 객체(주로 given절에서 사용)
@BeforeAll, @BeforeEach, @AfterEach를 통해 매 테스트에 사용할 객체를 고정시키는 것은 각 테스트의 독립성에 저해됩니다.
무분별한 setup은 정보의 파편화로 인해 가독성에 저해됩니다.
@BeforeAll, @BeforeEach, @AfterEach를 사용할 때는 다음과 같은 내용을 확인합시다.
각 테스트를 이해하는데 아예 몰라도 되는 내용인가?
수정해도 모든 테스트에 영향을 주지 않는가?
✅ Test Fixture 클렌징
@AfterEach에 persistence layer의 repository의 delete메서드 실행합니다.
@Transactional 사용하면 자동으로 rollback을 해줍니다만, 비즈니스 레이어에 트랜잭션에 대한 부분을 확인하기 어렵다는 사이드 이펙트가 있습니다.
✅ @ParameterizedTest
여러가지 파라미터(데이터)에 대해서 테스트를 진행하고 싶을 때 사용합니다.
✅ @DynamicTest
시나리오 테스트를 할 때 유용하게 사용할 수 있습니다.
단계별로 행위와 결과를 검증합니다.
✅ 테스트 수행도 비용이다
각 테스트의 환경을 통일하여 테스트에 드는 비용을 줄일 수 있습니다.
추상클래스를 상속받아서 테스트 코드가 돌아가도록 하면 환경을 통합해서 시간을 아낄 수 있습니다.
상위클래스에 테스트에 필요한 빈들을 한번에 주입받아 여러번 spring 플레임 워크가 초기화하는 횟수를 줄일 수 있습니다.
✅ Private Method Test
private method test는 할 필요가 없습니다.
private method를 테스트 해야할 시점은 객체를 분리할 시점으로 볼 수 있습니다.
✅ 테스트에서만 필요한 코드?
생성자나 빌더와 같이 테스트에서만 사용되는 코드는 최소한으로 허용합니다.
미래시점에 객체에 가져도되는 행위라고 생각이 되는경우 부담없이 사용합니다.
✅ 시간. 시간. 시간
시간이라는 요소는 개발자에게 선택을 강요합니다.
한정된 시간에서 올바른 테스트를 작성하기 위해서는 테스트를 추론하고, tdd가 익숙해질 때까지 반복이 필요합니다.
요구사항에 매몰되기 보다는, 어떤 케이스로 코드를 검증할 수 있을지 한번 생각해보는 훈련이 필요합니다.
도구를 빠르게 효율적으로 적재적소에 활용하기 위해서는 많이 사용해봐야 합니다.
마지막 중간 점검
그간 진행해오던 과제에 대해서 내가 제일 신경 쓴 부분은 중복제거, 깔끔해보이는 코드 였습니다. 이 생각이 잘못되었다는걸 이번 Day18 미션 리뷰에서 알 수 있었는데요. 중복제거나 깔끔해보이는 코드는 따라오는 효과이지, 그것이 목적이 되면 안될거라는 생각이 들었습니다. 리뷰에서 우빈님께서 하신 말씀 핵심은 중복 제거가 아니다. 도메인이다. 를 머리에 새겨넣어야겠습니다.
워밍업 클럽 회고
처음으로 여러명이 모여서 하나의 주제를 공부하는 시간을 보냈습니다. 짧다면 짧은 한달이지만, 응축되게 클린코드와 테스트 코드를 입문하기에 좋은 시간이 였습니다. 이 기간 동안 클린코드와 테스트 코드 짜는 저의 실력이 비약적으로 높아지지는 않았지만, 왜 필요하고 왜 꾸준히해야 하는지 목적의식을 심어주는 뜻깊은 시간이 되었습니다. 계속 이를 이어가고자.. 이 워밍업 클럽이 끝나고 따로 모여 스터디 진행을 신청했는데, 앞으로의 저의 생각과 코드에 많은 발전이 있기를 ...! 그동안 인프런 워밍업 클럽을 진행해주시느라 신경을 많이 써주신 박우빈 선생님과 인프런에 감사드리며 인프런 워밍업 클럽 "완"을 외치겠습니다!
댓글을 작성해보세요.