인프런 커뮤니티 질문&답변

Tony님의 프로필 이미지
Tony

작성한 질문수

실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기 (Java 프로젝트 리팩토링)

10강. 테스트 작성 끝! 다음으로!

Mocking 관련

작성

·

581

3

안녕하세요, 강의에서는 'Integration' Test 를 짠걸로 보이는데요.

실제 작업하실때 Mocking 해서 서비스함수 테스트를 짜시지는 않는지 궁금합니다.

우리가 쓴 테스트가 'Unit' 테스트가 되려면 Mocking 을 해야할 것 같은데 혹시 Mocking 을 하는 것과 테스트 코드를 짜는 방식에 대해서 어떻게 선호하시는지 궁금합니다.

답변 2

3

최태현님의 프로필 이미지
최태현
지식공유자

안녕하세요, Tony님!!! 크으~~ 너무 너무 좋은 질문이십니다..!!!!! Tony님께서도 아시다시피 이 주제가 굉장히 어렵고 사람마다 의견 역시 많이 다를 수 있는 부분이라 생각합니다! (https://www.inflearn.com/questions/624844 와 같은 이야기도 있었습니다!!)

 

우선 질문 주신 내용에 대한 답변을 먼저 드려보고 배경을 조금 더 말씀드려 보겠습니다! 😊

[답변]

  1. 작업하실 때 Mocking해서 서비스 함수 테스트를 작성하시나요?!

    1. 저는 서비스 함수 테스트를 작성할 때 되도록이면 Mocking을 하지 않습니다!

    2. 저는 런던파 고전파 중 고전파에 가깝고, '리팩토링 내성'을 중요하게 생각하기 때문이에요!

    3. 물론 외부 API 호출을 한다거나 FS와의 연동이 필요하다거나 하는 경우 즉, Mocking이 반드시 필요한 경우에는 mockk를 활용해서 Mocking을 사용합니다 ㅎㅎㅎ

  2. 우리가 쓴 테스트가 'Unit' 테스트가 되려면 Mocking 을 해야할 것 같은데 혹시 Mocking 을 하는 것과 테스트 코드를 짜는 방식에 대해서 어떻게 선호하시는지 궁금합니다.

    1. 위의 답변에서 눈치채셨겠지만, 저는 강의에서 작성된 방식과 동일하게 테스트 작성 하는 것을 선호합니다~!!!

    2. 그리고 'Unit' 테스트 라고 표현을 해주셨는데요!! 저도 엄밀하게는 강의에서 작성된 테스트가 'Integrate' 테스트라고 생각합니다! 다만, 특정한 단일 기능을 테스트 한다는 의미에서는 단일 테스트라고 표현할 수 있지 않을까 매우 개인적으로 생각합니다 ㅎㅎㅎㅎ (마치 저희가 속도와 속력을 구분하지 않는 것처럼요!)

    3. 또한 강의에서 작성된 테스트 코드가 'Unit Test'가 아닌 이유는 Tony님과 제가 다르게 생각하고 있을거에요!!

    4. 감히 추측해보자면, Tony님께서는 Service 그 자체만 테스트 하지 않고, 협력하는 객체(ex. Repository)의 기능까지 테스트 코드에서 실행되기 때문에 'Integrated Test'라고 표현해주셨을 것 같습니다!

    5. 반면 저는 고전파 입장에서 이 테스트가 단일 동작 단위를 검증하고, (가능한) 빠르게 수행되지는 것 까지는 맞지만 H2라는 공유 의존성을 가지고 있는 한계로 다른 테스트와 동시에 수행될 수 없어 'Integrated Test'라고 생각하고 있습니다!!

 

[배경]

고전파, 런던파, 좋은 단위 테스트를 구성하는 요소는 무엇인지에 대한 내용은 제 블로그에 예전에 <단위 테스트> 라는 책을 읽으며 정리한 적이 있어 공유드립니다!!

 

다시 한 번 강조드리지만, 정답이 없는 문제라고 생각합니다!! 😊 다만 저는 계층간의 mocking을 사용한 테스트가 많이 존재하는 환경에서 새로운 Business 요구사항을 구현할 때 테스트 코드까지 영향범위가 퍼져 개발 속도가 느려지는 경험을 많이 했었고, mocking을 하지 않는다는 제약조건에서 Testable한 프로덕트 구조가 나오는 경험을 했어서 고전파 쪽으로 기운것 같습니다 ㅎㅎㅎㅎ

 

혹시나 더 궁금한 점 있으시다면 편하게 말씀해주세요!!! 감사합니다~!! 🙏🙏

 

2

Tony님의 프로필 이미지
Tony
질문자

좋은 답변 감사합니다.

사실 실무에서 서비스에 주입되는 repository를 mocking 해서 테스트를 짰을때 실리를 많이 느끼지 못해서 매번 프로젝트 셋업이나 피쳐 개발때 어떻게 테스트 코드를 운영할까 고민을 했는데 태현님 답변이 좋은 가이드가 된 것 같습니다.

아직 테스트코드 경험이 미천하다보니 내 판단을 믿기 어려워 항상 개발하시는 분들께 물어보는 주제인 것 같습니다 ㅎㅎ

최태현님의 프로필 이미지
최태현
지식공유자

아유~ 아닙니다~~ 미천한 경험은 없습니다~~ 다양한 방식으로 다 도움이 되더라고요~~
이 부분이 정말 어려운 주제라 저도 공부할 내용이 정말 많아요!! 😊😊

약간의 가이드가 될 수 있어 정말 다행이네요!! 언제든지 편하게 질문 남겨주세요~!!
감사합니다 ㅎㅎㅎㅎ

 

Tony님의 프로필 이미지
Tony

작성한 질문수

질문하기