
워밍업 클럽 3기 BE 클린코드&테스트 - 4주차 발자국
학습 내용
섹션 7. Mock을 마주하는 자세
Test Double: 테스트에서 실제 객체를 대체하여 사용하는 가짜 객체의 총칭 (대역 객체)
Dummy
아무 것도 하지 않는 깡통 객체
Fake
단순한 형태로 동일한 기능을 수행하나, 프로덕션에서 쓰기는 부족한 객체
Stub
테스트에서 요청한 것에 대해 미리 준비한 결과를 제공하는 객체 (그 외에는 응답하지 않음)
상태 검증 /
Stateful
Spy
Stub이면서 호출된 내용을 기록하여 보여줄 수 있는 객체
일부는 실제 객체처럼 동작시키고 일부만 Stubbing할 수 있다.
Mock
행위에 대한 기대를 명세하고, 그에 따라 동작하도록 만들어진 객체
행위 검증 / Stateless
@Mock, @MockBean, @Spy, @SpyBean, @IngectMocks
@Mock
진짜 객체가 아닌 가짜 객체를 생성해서 (테스트에) 사용
Spring Context와 무관
@InjectMocks나 수동으로 주입 가능
단위 테스트에서 사용
@MockBean
Spring에 의존적
Spring 빈에 등록된 객체를 Mock으로 대체
Spring에서 의존성 주입을 해줌
통합 테스트에 사용
@Spy
실제 객체의 일부 동작만 Mocking (객체의 일부만 stub 처리)
Spring Context와 무관
단위 테스트에 사용
@SpyBean
Spring에 의존적
Spring Bean에 등록된 객체를 Spy로 대체
통합 테스트에 사용
@InjectMocks
@Mock 또는 @Spy로 만든 객체를 의존성으로 주입(해주는 대상 클래스 지정)
섹션8. 더 나은 테스트를 작성하기 위한 구체적 조언
테스트 하나 당 목적은 하나
한 문단에 하나의 주제만
논리 구조(분기문, 반복문)은 최대한 지양하기
완벽한 제어
테스트 환경 조성시 모든 조건을 완벽하게 제어할 수 있어야 함
현재 날짜/시간, 랜덤 등 제어할 수 없는 변수 사용 지양
사용해야 하면 파라미터로 넘겨서 상위 계층에서 관리
테스트 환경의 독립성, 테스트 간 독립성 보장
given절에서 팩토리 메서드 대신 순수한 생성자/builder 기반으로 객체 생성
공유 자원 사용 X
Test Fixture
Test Fixture: 테스트를 위해 원하는 상태로 고정시킨 일련의 객체
한 눈에 들어오는 Test Fixture 구성하기
각 테스트마다 명시해 한 눈에 들어오도록 테스트 작성
@BeforeEach, @
BeforeAll, @AfterEach, @AfterAll
Test Fixture 클렌징
Test Fixture 클렌징
deleteAll()
deleteAllInBatch()
@ParameterizedTest, @DynamicTest
@ParameterizedTest: 동일한 테스트를 다른 입력값으로 테스트할 때 사용
@DynamicTest: 시나리오 기반으로 테스트할 때 사용 (테스트를 실행할 때 동적으로 생성하는 방식)
수행 환경 통합하기
테스트도 비용이기 때문에 환경을 통합해야 한다.
통합 클래스를 만들어 서버 뜨는 횟수를 최소화
private method test
private method는 테스트 수행할 필요 없음
테스트에서만 필요한 코드
만들어도 되지만 최대한 지양
섹션 9. Appendix지만 중요한 것들
학습 테스트
잘 모르는 기능, 라이브러리, 프레임워크를 학습하기 위해 작성하는 테스트
여러 테스트 케이스를 스스로 정의하고 검증하는 과정을 통해 구체적인 동작과 기능을 학습
Spring Rest Docs
테스트 코드를 통한 API 문서 자동화 도구
API 명세를 문서로 만들고 외부에 제공함으로써 협업을 원활하게 한다.
미션
Day 16
Day18
회고
드디어 열심히 달려온 워밍업 클럽이 끝났다. 한달 동안 가독성 좋은 코드를 작성하는 방법과, 코드를 테스트하는 법에 대해 정말 많은 것을 배웠다. 솔직히 후반부에는 진도를 따라가기도 벅차게 느껴졌고, 미션도 몇번 놓쳤지만 포기하지 않고 완주해낸 것 자체가 뿌듯하다. 또한 그간 코드를 작성하며 크게 신경쓰지 않았던 것들에 대해 완전히 다른 시각을 접할 수 있어서 정말 알차고 좋은 시간이었다. 아직 학습한 내용을 온전히 소화하지는 못했지만, 다시한번 강의 내용을 복습하며 공부해보고, 수료식 전까지 놓친 미션들도 다시 수행해볼 것이다.
댓글을 작성해보세요.