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

변지수23님의 프로필 이미지

작성한 질문수

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

7강. Junit5으로 Spring Boot 테스트하기

repository mocking 문의

작성

·

1K

1

안녕하세요~ 최태현님

테스트 코드 작성에 있어서 고민이 있어 문의남깁니다.

이전까지 다른 강의 영상에서는 repository를 mocking해서 서비스를 테스트하는 영상을 많이 봤습니다. 그래서 서비스 테스트시에는 repository 를 mocking 하는것이 실무에서 흔한 방식이고 best practice라고 생각했습니다

그런데 실무에서 적용해보니 mocking을 하게되면 테스트 코드가 서비스 메소드의 내부 구현에 대해 너무 잘 알게되더라구요, 그러다보니 실제 코드의 내부 구현이 바뀌면 테스트 코드도 바뀌게 될 여지가 많더라구요..

반면 스프링부트 테스트로 h2에 연결해서 하는 테스트는 상대적으로 느려 피드백이 늦는것이 단점일것같습니다.

개인적으로는 강의에 나온것처럼 스프링 부트 테스트로 h2에 연결해서 테스트하는 후자가 더 마음에 드는데요. 

실제로 현업에서는 서비스 테스트시 둘중 어떤걸로 사용하시나요? 실제 강의하신것처럼 후자로 테스트를 많이 하시나요?

좋은 강의 감사합니다~

답변 2

1

지수님 혹시 내부구현이 노출된다는 게 어떤 건지 잘 이해가 안 가는데 조금 더 설명해주실 수 있나요?

모킹하는 과정에서 노출되는 코드 말씀하시는건가요?

1

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

안녕하세요~ 지수님!!! 반갑습니다 ㅎㅎㅎ 오랜만에 뵙네요!!!

크으~~ 매우매우 좋은 질문이십니다!!

 

우선 결론부터 말씀드릴게요! 사실 정답은 없습니다!

하지만, 저는 지수님께서 경험하셨던 것과 같이 내부 구현이 노출되는 것을 좋지 않다고 생각하여 통합된 환경에서의 테스트를 선호합니다! 실제로 제가 경험했던 환경 역시 특별한 경우를 제외하고는 mocking을 하지 않고 테스트를 작성했습니다!

내부 구현이 노출되면 유지보수성이 확 떨어지게 되거든요 😢

 

사실 이 논쟁은 아주 뜨거운 감자로, 고전파 vs 런던파로 불리기도 하는데요... 제가 블로그에 간단히 정리했던,

- https://lannstark.tistory.com/227 내용과

- https://lannstark.tistory.com/224 내용을 확인해보시면 좋을 것 같습니다!!

추가로 위 포스트에서 레퍼런스로 삼고 있는 <단위 테스트> 책 역시 꽤 좋습니다 ㅎㅎㅎ

 

 

저는 테스트 코드를 작성할 때 리팩토링 내성을 굉장히 중요한 가치로 두고 있고 때문에 말씀드렸던것처럼 mocking을 꼭 필요한 경우를 제외하고는 하지 않는 편입니다 ㅎㅎㅎㅎ 프로그래밍에 정답은 없다 보니 사람마다 의견이 다를 수 있다고 생각합니다!

관련해서 더 궁금한 점이 생기시면 언제든 편하게 질문 남겨주세요~!!!

감사합니다!!! 😊

 

 

변지수23님의 프로필 이미지
변지수23
질문자

오랜만에 뵙네요~ㅎㅎ 잘지내시죠?

궁금했던 내용이였는데 속시원하게 풀려서 좋네요 ㅎㅎ

역시 매번 친절하고 상세하게 알려주셔서 매번 감사합니다!!

좋은 하루 되세요~~ㅎㅎ 👍

 

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

아이고~ 덕분에 잘 지내고 있습니다 ㅎㅎㅎㅎ 또 보시다가 질문 있으시면 편하게 부탁드려요~! 감사합니다!!! 👍