-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[TEST/#299] 배너 생성 컨트롤러 테스트코드 작성 #301
Conversation
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
고생하셨습니다 :)
몇 가지 답변을 드려볼게요!
그러나 제 API는 생성과 관련되어 있기 때문에 해당 부분이 필요 없다는 생각이 들었습니다 그래서 서비스 단 모킹 코드를 각 테스트에서 진행하는 것은 어떤지 궁금합니다
우선 부분적으로 전체의 BeforeEach가 불필요한 케이스도 다수 존재할 수 있다고 생각합니다.
다만 반대로 불필요한 케이스로 인해 중복되는 설정 코드를 테스트마다 작성하게 되면 중복 코드가 늘어날 것이라고 생각합니다.
이에 대해선 동일한 도메인/서비스에 대한 상위 Test 클래스에서 @Nested
를 적용한 하위 Sub Test로 관심사를 분리해서 진행한다면
충분히 아래와 같이 관리할 수 있을 것 같습니다
- 공통의 BeforeEach가 필요한 관심사 = 속한 Nested 클래스 내부에서 공통의 BeforeEach 적용
- 공통의 BeforeEach가 필요없는 관심사 = 속한 Nested 클래스 내부에서 공통의 BeforeEach 적용없이 각 테스트 내부에서 설정
또한 상수 값은 BeforeEach와는 별개로 활용될 수 있기 때문에 최상위 클래스에 static final로 선언해두는 것이 좋을 것 같고
"저장" 혹은 "모킹"은 위에 말한 방식으로 상수를 활용해 적용하는 방식으로 진행하면 좋을 것 같아요!
저는 생각이 조금 다른 것 같습니다. 사실 본 테스트의 경우, "API"(Controller)에 대한 테스트라고 생각이 되는데 해당 단계에서는 가장 중요한 목적이 "Client는 Request에 대해 의도한 형식의 Response를 수신하는가" 검증하는 것이기 때문에 더불어 "givenBannerDetail의 값과 비교"는 "해당 어플리케이션은 의도한대로 구현되어 의도한 결과값이 반환되는가"가 목적이고 "Service" 레이어를 검증하기위한 의도에 적합하다고 생각합니다. |
그러면 제 코드에서 givenBannerDetail은 서비스 코드로부터 조회해오는 것이 아닌 service 레이어에서 생성 이후에 반환되는 값을 모킹하여 그 값이 반환된 형태를 담도록 수정하고, 현욱오빠 코드에서만 bannerService 모킹 부분을 deleteBanner로 수정한 후 머지하면 될까요? 제 코드만 수정하기 전에 아래 첨부해 미리 보여드리겠습니다!
|
앗 제가 남긴 리뷰를 남겼던 이유는 그래서 테스트 코드에 대해서는 별도의 리뷰를 안달았던 것이었구요!! |
저의 의도는 mockMvc으로 반환되는 값의 검증은 필요하되 그 비교되는 값을 bannerSerivce.getBanner로 가져오지 않아도 될 것 같다는 의미였습니다! 텍스트로 좀 더 잘 전달해야했는데 부족했던 것 같네요 ^^.. 죄송합니다 Nested를 사용함으로써 beforeEach에서 모킹한 값을 꼭 사용해야할 것 같다는 생각이 없어진 부분이라 넘어가도 될 것 같습니다! |
Related Issue 🚀
Work Description ✏️
PR Point 📸
when(bannerService.getBannerDetail(MOCK_BANNER_ID)).thenReturn(mockBannerDetail);
부분에서 모킹한 getBannerDetail 메서드를 사용하고 있는데요 이 부분이 현재 모든 테스트 실행 이전에 동작하는@BeforeEach
에 정의되어 있습니다