💭 오늘의 학습 전략
# Mockito
◼️ Mock
◼️ Mockito
◽Mockito 실습
# TDD(Test Driven Development)
◼️ 특징
◼️ 장단점
🌼 학습한 것들
◾ Mock
▪️ Mock: 진짜와 유사한 상황, 물건, 물질
▪️ 테스트에서의 Mock: 가짜 객체
▪️ 테스트에 Mock을 사용하는 것: Mocking
◾ Mock
▪️ Mockito: Spring Framework 자체적으로도 지원하는 Mocking 라이브러리
==> Mock을 통해 다른 계층과 연결을 분리시켜 테스트 대상에 집중!
◾ Mockito
1) API 계층 슬라이스 테스트
▪️ @MockBean: Mock 객체 생성 및 주입
▪️ given:
Mock 객체가 특정 값을 리턴하는 동작 지정
- ex) Member 타입의 파라미터를 받아 Member 타입을 반환하는 Mock Service 객체를 정의해두기
given(memberService.createMember(Mockito.any(Member.class))).willReturn(new Member());
=> 이전과 같이 Contoller 테스트 시, 실제 Service가 아닌 Mock 객체를 통해 테스트 진행
▪️ Stubbing: 테스트를 위해 Mock 객체가 항상 일정한 동작을 하도록 지정하는 것
- given -> stubbing method
2) 데이터 액세스 계층 슬라이스 테스트
▪️ @ExtendWith(MockitoExtension.class): Spring 의존 없이 Junit, Mockito의 기능만 사용
▪️ @Mock: 해당 필드 객체를 Mock 객체로 생성
▪️ @InjectMocks: @Mock으로 생성한 객체를 주입해줄 객체
- ex) Repository에 의존하는 Service에 주입
@Mock
private MemberRepository memberRepository;
@InjectMocks
private MemberService memberService;
◾ TDD: 테스트 주도 개발 (테스트 -> 구현)
▪️ 전통적 개발의 경우
- 도메인 도출 -> 백엔드 전반 클래스, 인터페이스 설계 -> 큰 틀 -> 메서드 정의, 구현 -> 테스트 -> 디버깅
▪️ 특징
- 모든 조건을 만족하는 테스트를 먼저 진행 하고, 점진적으로 실패하는 테스트를 하나씩 고쳐간다
- 매번 조건에 맞는 테스트가 passed 될 정도씩만 우선 작성하면서 진행
- 테스트 실패 -> 성공할만큼 구현 -> 성공 -> 리팩토링 -> 테스트 확인 ...
▪️ 장점
- 테스트 통과할 만큼씩만 구현하기 때문에 한 번에 많이 구현하지 않아도 됨
- 단순 기능 -> 복잡 확장 => 그때 그때 검증 -> 그때 그때 리팩토링 => 유지보수 비용 감소
- 잘못된 코드가 남아있을 가능성, 심리적 불안감 감소(ㅎㅎ)
▪️ 단점
- 테스트 코드에 익숙하지 않거나 작성하기 싫은 사람에게는 부정적 -> 사전 협의 필요
🔥 보충이 필요한 것들
◾Page 객체 생성
◾과제 완성하기
💨 하루를 마치며
1. 실습 후기
처음에는 실습을 하나도 진행하지 못 했다. Mockito가 너무 생소하고 흐름이 잘 이해가 되지 않았기 때문이다.
특히 mapper를 mocking해서 왜 굳이 빈 객체를 리턴하는지,
service mock에서 빈 객체를 리턴하는데 어떻게 테스트 검증이 가능한 건지 등등 아주 아주 혼란스러웠는데
페어분이 잘 설명해주시고 체크포인트 세션까지 들으면서 제대로 이해할 수 있었다!
API 계층 테스트로 살펴보면
controller는 실제 흐름대로 타기 때문에 그 안에서 연결된 리턴값 을 사용하는 로직이 있다면 의미없는 데이터라도 넣어주어야 한다.
service에서 빈 객체를 리턴하더라도 실제 응답에는 아무 연관이 없다. (내가 비즈니스 로직에 자꾸 집착했던 것 같다)
"슬라이스 테스트"의 목적이 진짜 무엇인지 잊고 있었다. 컨트롤러에서의 요청과 응답 처리만 잘 봐주면 된다.
+ mapper는 성능을 고려해서 mocking 여부를 결정하면 된다 (N+1, DB 접근이 계속...)
fetch default @xxToOne에서는 EAGER, @xxToMany에서는 LAZY
'공부기록 > TIL' 카테고리의 다른 글
2023/01/10 TIL | 빌드/실행/배포 (0) | 2023.01.10 |
---|---|
2023/01/06 TIL | API 문서화 (1) (0) | 2023.01.06 |
2023/01/14 TIL | 테스팅 (2) 슬라이스 테스트 (0) | 2023.01.04 |
2023/01/03 TIL | 테스팅 (1) 단위 테스트 (0) | 2023.01.03 |
2022/12/28 TIL | JPA (2) 연관 관계 매핑 (2) | 2022.12.29 |
댓글