작성
·
86
0
학습 관련 질문을 남겨주세요. 어떤 부분이 고민인지, 무엇이 문제인지 상세히 작성하면 더 좋아요!
먼저 유사한 질문이 있었는지 검색해 보세요.
서로 예의를 지키며 존중하는 문화를 만들어가요.
안녕하세요! Persistence Layer에서 @Mock 대신 @SpringBootTest를 사용해 단위 테스트를 진행하는 이유가 궁금합니다! 리소스가 더 사용되면서 테스트가 오래걸리는 단점이 있지 않나요?
같은 이유로, Business Layer에서 @Mock과 @InjectionMocks으로 단위테스트를 진행하는 대신, @SpringBootTest로 통합테스트를 선호하시는 이유가 무엇인가요?
@SpringBootTest를 사용해도 큰 단점은 없는걸까요?
답변 2
0
안녕하세요, 강연주 님!
이후 섹션 7의 "Classicist VS. Mockist" 강의에서도 설명드리겠지만, 제 의견은 무조건적인 mocking 보다는 최대한 실제 환경과 동일한 구성 하에 테스트하는 것이 낫다, 라는 관점입니다.
모듈별, 레이어별로 떼어서 각각 테스트한다고 해도, 실제로 모든 레이어를 통합한 운영 환경에서는 모듈 간 통합으로 인한 예기치 못한 문제가 뒤늦게 발견될 수 있습니다.
말씀주신대로 속도 차이가 당연히 있긴 하지만, 그래도 인메모리 DB인 H2를 사용하고 있어서 그정도 트레이드오프는 괜찮다고 생각해요 ㅎㅎ
도움이 되셨기를 바랍니다.
감사합니다 🙂
0
안녕하세요, 인프런 AI 인턴입니다. 강연주님 질문에 대해 답변드리겠습니다.
@SpringBootTest
는 실제 애플리케이션 컨텍스트를 로드하여 애플리케이션의 실제 환경과 유사한 상태에서 테스트를 진행할 수 있게 해주는 어노테이션입니다. 이를 사용하면 시스템의 통합성을 확인할 수 있으며, 모든 빈(bean)들이 제대로 구성되고 초기화되는지 확인할 수 있습니다. 이러한 방식은 종종 통합 테스트에 사용됩니다.
@SpringBootTest 사용 이유와 장점:
- 전체 시스템 테스트: 애플리케이션의 모든 레이어를 통합하여 테스트함으로써, 서로 다른 레이어 간의 상호작용이 제대로 되는지 확인할 수 있습니다.
- 실제 의존성 테스트: 모의 객체(Mock) 대신 실제 객체를 사용하기 때문에, 실제 데이터베이스 연결이나 HTTP 호출 등 외부 시스템과의 상호 작용을 테스트할 수 있습니다.
단점:
- 리소스 소모: 실제 전체 애플리케이션 환경을 띄우기 때문에 리소스가 많이 소모되며 테스트 속도가 느려질 수 있습니다.
- 복잡한 환경 설정: 실제 애플리케이션 환경의 모든 구성 요소가 포함되기 때문에, 설정이 복잡해질 수 있습니다.
Business Layer에서 @Mock
과 @InjectMocks
를 사용한 단위 테스트는 속도가 빠르고, 특정 로직에 집중할 수 있는 장점이 있으나, 실제 환경과 다를 수 있다는 제한도 있습니다. 따라서, 큰 그림에서의 정확성을 확인하기 위해 @SpringBootTest
를 사용하여 통합 테스트를 추가하는 것은 유익할 수 있습니다.
결론적으로, @SpringBootTest
의 선택은 어떤 종류의 테스트를 필요로 하는지와 얼마나 애플리케이션의 전체 환경을 필요로 하는지에 따라 달라질 수 있습니다. 단위 테스트와 통합 테스트의 균형 잡힌 사용을 통해 효율적인 테스트 전략을 구축하실 수 있습니다.
비슷한 주제에 대해 자세한 논의를 원하시면 다음 링크를 참조해 주세요:
- 단위테스트의 개념에 대해서 질문 드립니다!
- 마이바티스와 테스트 코드
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.