작성
·
581
3
안녕하세요, 강의에서는 'Integration' Test 를 짠걸로 보이는데요.
실제 작업하실때 Mocking 해서 서비스함수 테스트를 짜시지는 않는지 궁금합니다.
우리가 쓴 테스트가 'Unit' 테스트가 되려면 Mocking 을 해야할 것 같은데 혹시 Mocking 을 하는 것과 테스트 코드를 짜는 방식에 대해서 어떻게 선호하시는지 궁금합니다.
답변 2
3
안녕하세요, Tony님!!! 크으~~ 너무 너무 좋은 질문이십니다..!!!!! Tony님께서도 아시다시피 이 주제가 굉장히 어렵고 사람마다 의견 역시 많이 다를 수 있는 부분이라 생각합니다! (https://www.inflearn.com/questions/624844 와 같은 이야기도 있었습니다!!)
우선 질문 주신 내용에 대한 답변을 먼저 드려보고 배경을 조금 더 말씀드려 보겠습니다! 😊
[답변]
작업하실 때 Mocking해서 서비스 함수 테스트를 작성하시나요?!
저는 서비스 함수 테스트를 작성할 때 되도록이면 Mocking을 하지 않습니다!
저는 런던파 고전파 중 고전파에 가깝고, '리팩토링 내성'을 중요하게 생각하기 때문이에요!
물론 외부 API 호출을 한다거나 FS와의 연동이 필요하다거나 하는 경우 즉, Mocking이 반드시 필요한 경우에는 mockk를 활용해서 Mocking을 사용합니다 ㅎㅎㅎ
우리가 쓴 테스트가 'Unit' 테스트가 되려면 Mocking 을 해야할 것 같은데 혹시 Mocking 을 하는 것과 테스트 코드를 짜는 방식에 대해서 어떻게 선호하시는지 궁금합니다.
위의 답변에서 눈치채셨겠지만, 저는 강의에서 작성된 방식과 동일하게 테스트 작성 하는 것을 선호합니다~!!!
그리고 'Unit' 테스트 라고 표현을 해주셨는데요!! 저도 엄밀하게는 강의에서 작성된 테스트가 'Integrate' 테스트라고 생각합니다! 다만, 특정한 단일 기능을 테스트 한다는 의미에서는 단일 테스트라고 표현할 수 있지 않을까 매우 개인적으로 생각합니다 ㅎㅎㅎㅎ (마치 저희가 속도와 속력을 구분하지 않는 것처럼요!)
또한 강의에서 작성된 테스트 코드가 'Unit Test'가 아닌 이유는 Tony님과 제가 다르게 생각하고 있을거에요!!
감히 추측해보자면, Tony님께서는 Service 그 자체만 테스트 하지 않고, 협력하는 객체(ex. Repository)의 기능까지 테스트 코드에서 실행되기 때문에 'Integrated Test'라고 표현해주셨을 것 같습니다!
반면 저는 고전파 입장에서 이 테스트가 단일 동작 단위를 검증하고, (가능한) 빠르게 수행되지는 것 까지는 맞지만 H2라는 공유 의존성을 가지고 있는 한계로 다른 테스트와 동시에 수행될 수 없어 'Integrated Test'라고 생각하고 있습니다!!
[배경]
고전파, 런던파, 좋은 단위 테스트를 구성하는 요소는 무엇인지에 대한 내용은 제 블로그에 예전에 <단위 테스트> 라는 책을 읽으며 정리한 적이 있어 공유드립니다!!
고전파와 런던파 - https://lannstark.tistory.com/227
좋은 단위 테스트의 4대 요소 - https://lannstark.tistory.com/224
다시 한 번 강조드리지만, 정답이 없는 문제라고 생각합니다!! 😊 다만 저는 계층간의 mocking을 사용한 테스트가 많이 존재하는 환경에서 새로운 Business 요구사항을 구현할 때 테스트 코드까지 영향범위가 퍼져 개발 속도가 느려지는 경험을 많이 했었고, mocking을 하지 않는다는 제약조건에서 Testable한 프로덕트 구조가 나오는 경험을 했어서 고전파 쪽으로 기운것 같습니다 ㅎㅎㅎㅎ
혹시나 더 궁금한 점 있으시다면 편하게 말씀해주세요!!! 감사합니다~!! 🙏🙏
2
좋은 답변 감사합니다.
사실 실무에서 서비스에 주입되는 repository를 mocking 해서 테스트를 짰을때 실리를 많이 느끼지 못해서 매번 프로젝트 셋업이나 피쳐 개발때 어떻게 테스트 코드를 운영할까 고민을 했는데 태현님 답변이 좋은 가이드가 된 것 같습니다.
아직 테스트코드 경험이 미천하다보니 내 판단을 믿기 어려워 항상 개발하시는 분들께 물어보는 주제인 것 같습니다 ㅎㅎ
아유~ 아닙니다~~ 미천한 경험은 없습니다~~ 다양한 방식으로 다 도움이 되더라고요~~
이 부분이 정말 어려운 주제라 저도 공부할 내용이 정말 많아요!! 😊😊
약간의 가이드가 될 수 있어 정말 다행이네요!! 언제든지 편하게 질문 남겨주세요~!!
감사합니다 ㅎㅎㅎㅎ