
워밍업 클럽 3기 BE 클린코드&테스트 - 4주차 발자국
🐾 발자국
워밍업 클럽 3기 BE 클린코드 & 테스트 - 4주차를 듣고 작성하는 발자국입니다
이번에 들은 강의 바로 가기 ⬇
📃 회고
드디어 워밍업 클럽 3기가 끝나는 4주차가 다가왔습니다 🥹
시간이 정말 빠르네요 ,,
처음 시작할 때는 강의 커리큘럼을 제때제때 들어야지 했는데 한 번 밀리니깐 진짜 한도 끝도 없이 밀리더군요
그래도 완강한 것에 의의를 두기로 했습니다 ☺
📺 강의 내용 정리
섹션 7 Mock 을 마주하는 자세
외부 서비스가 있을 때 테스트하기 위해서 항상 호출할 수 없으니 이런 경우 Mocking 을 사용
@MockitoBean
private MailSendClient mailSendClient;
Mockito.when(mailSendClient.sendEmail(any(String.class), any(String.class), any(String.class), any(String.class)))
.thenReturn(true);
위처럼 MailSendClient 를 Mock 처리해주고, 무조건 true 가 리턴하도록 Mocking 처리를 해줄 수 있다.
Test Double
Dummy : 아무것도 하지 않는 깡통 객체
Fake : 단순한 형태로 동일한 기능은 수행하나, 프로덕션에서 쓰기에는 부족한 객체
Stub : 테스트에서 요청한 것에 대해 미리 준비한 결과를 제공하는 객체 그 외에는 응답하지 않는다.
Spy : Stub 이면서 호출된 내용을 기록하여 보여줄 수 있는 객체, 일부는 실제 객체처럼 동작시키고 일부만 Stubbing 할 수 있다.
Mock : 행위에 대한 기대를 명세하고, 그에 따라 동작하도록 만들어진 객체
BDDMockito 를 사용하면 mockito.when 을 한 번 더 감싸 이름만 변경해서 given 으로 사용 가능
섹션 8 더 나은 테스트를 작성하기 위한 구체적 조언
한 문단에 한 주제의 테스트만 작성하자
제어할 수 없는 변수보다는 고정된 날짜와 고정된 값을 사용하자
테스트를 이해하기 위해서 논리구조가 들어가는 구조는 사용하지 말자
테스트 간 순서가 없어야하고 독립성을 보장해야 한다
테스트가 독립될 수 있도록 구성하자
값이나 환경에 대해서 데이터를 바꿔서 여러번 실행하고 싶을 때 @ParameterizedTest 사용
시나리오를 작성하고 싶다면 @DynamicTest 사용
각 테스트 파일이 실행될 때마다 Spring Boot 서버가 실행되기 때문에 동일한 환경에서 테스트 코드가 구현될 수 있도록 관리필요
private 메서드의 테스트가 필요하다면 객체를 분리할 시점인지 의문을 던져보기
테스트에서 필요한 메소드를 만들어돈 되지만 보수적으로 접근하자.
섹션 9 Appendix
학습 테스트 : 잘 모르는 기능, 라이브러리, 프레임워크를 학습하기 위해서 작성하는 테스트
Spring REST Docs :테스트 코드를 통해 API 문서 자동화하는 도구
✔ 미션
DAY 16 - Layered Architecture 구조의 레이어별 특징
Persistence Layer
DB 와의 상호작용을 담당하며, 데이터에 직접적으로 접근하는 계층
테스트 방법
데이터베이스에 CRUD 가 제대로 수행되는지 확인
비즈니스로직이 들어가는게 아니라 데이터에 집중
실제 데이터베이스를 사용하여 통합 테스트를 진행
Business Layer
비즈니스 로직을 담당하며, 실제 핵심적인 작업을 수행
테스트 방법
비즈니스 로직에서 발생할 수 있는 예외 상황을 처리하는 테스트를 집중적으로 작성
비즈니스 로직 자체의 정확성을 확인하고 다양한 입력에 대한 예외 케이스 를 포함한 정상 동작 검증
Presentation Layer
외부 요청을 받는 계층으로 사용자 인터페이스나 외부 API와의 상호작용을 담당
테스트 방법
하단의 레이어는 모킹처리하여 실제 구현이 아닌 가짜 구현으로 테스트 진행
사용자가 입력한 파라미터가 유효한지, 잘못된 값이 들어오지 않았는지 유효성 검사 케이스를 포함해야 한다
DAY 18 - @Mock
워밍업 클럽 3기 BE 클린코드&테스트 - DAY18 미션
댓글을 작성해보세요.