4주차 발자국
1. 학습 회고
4주차 키워드: Mock과 테스트를 위한 Tips
day16 - Layered Architecture 마지막 강의, [미션] Layered별 특징과 테스트 방법
day17 - Mock
day18 - 테스트 작성 조언, [미션] 테스트 어노테이션들과 댓글 서비스 테스트
day19 - Spring REST Docs
day20 - 중간점검
4주차는 테스트와 관련된 어노테이션들과 테스트 코드를 어떤 식으로 구성하면 좋을지에 대해 학습하는 주였다.
개인적으로는 헷갈렸던 여러 어노테이션들을 짚고 넘어가는 주여서 좋았다.
1달이 생각보다 금방 지나가서 놀랐는데 다음에는 다른 분야의 워밍업클럽도 참여해보고 싶다.
미션 회고
Day 16 미션 Presentation, Business, Persistence 3개 Layer의 특징과 어떻게 테스트하면 좋을지 나만의 언어로 표현
강의를 기반으로 Layered별 특징을 요약해서 제출했는데,
Presentation/Business/Persistence 각 계층을 어떤 식으로 대하면 좋을지,
특히, Besiness에서는 LocalDateTime처럼 예상치 못한 결과를 얻을 수 있거나 테스트하기 어려운 코드는 아닌지
Presentation에서는 정책에 대한 검증까지 하는 건 아닌지 등 주의해야 할 점들을 다시 한 번 정리하는 미션이었다.
Day 18 미션은 테스트에 사용되는 어노테이션들을 정리하고,
제시된 코드를 보고 @BeforeEach, given절, when절에 적절히 배치해보는 미션
18-1. @Mock, @MockBean, @Spy, @SpyBean, @InjectMocks 에 대해서는
강의내용을 기반으로 간략히 정리를 했다.
다시 한 번 정리를 하면, 테스트의 편의를 위해 Mocking을 하며, 어노테이션들을 사용하면 더 편리하게 다룰 수 있다.
XXXBean과의 가장 큰 차이점은 XXXBean은 Spring 환경에서 ApplicationContext에서 Bean 으로 관리되어
의존성 처리가 편하다는 점.
그 외 Spring 이 필요없거나 의존성이 적고, 간단한 테스트들의 경우 @Mock, @InjectMocks을 활용하면 되겠다.
18-2. 주어진 코드는 writeCommet, updateComment, cannotUpdateCommentWhenUserIsIsNotWriter 3개
댓글을 생성/수정 등에 대한 검증이므로 확인하고자 하는 행위들을 when 절에,
그 외 나머지 것들은 모두 준비단계이므로 given 절에 배치했다.
따라서, writeCommet에는 댓글 생성, updateComment에는 댓글 수정,
cannotUpdateCommentWhenUserIsIsNotWriter에는 댓글 수정 시도를 when 절에 배치했다.
이제 @BeforeEach 에 대해 고민해 봐야하는데,
@BeforeEach는 테스트 실행 전에 수행되는 단계로 모든 테스트에 영향을 미칠 수 있어 주의해야 한다.
지금 수행 중인 테스트는 댓글 서비스 테스트이고, 어떠한 경우든 댓글을 작성하기 위해서는
사용자와 게시물 생성이 필수일 것이라 생각했다.
그리고 앞으로 댓글에 대한 테스트가 추가된다고 해도 사용자/게시글 생성이 선행되어야 댓글이 있을 것이다.
따라서, @BeforeEach 에 사용자 생성에 필요한 내용 준비/생성, 게시물 생성에 필요한 준비/생성을 배치했다.
학습 출처
인프런 워밍업 클럽 스터디 4기 - 백엔드 클린코드, 테스트 코드
수강 강의:
Practical Testing: 실용적인 테스트 가이드 - 박우빈
댓글을 작성해보세요.