개발 문화 · 협업 · 중급
단위 테스트(Unit Test) 작성 시 Mock이나 Stub 객체를 사용하는 이유와, 실제 객체를 사용하는 경우와 비교하여 설명해주세요.
힌트 · 외부 의존성을 격리하여 테스트의 독립성과 속도를 높이지만, 실제 객체는 통합적인 동작을 검증하는 데 사용됩니다.
의존성 격리테스트 격리통제 불가능한 요소예측 가능한 결과테스트 용이성
모범답안
단위 테스트에서 Mock이나 Stub 객체를 사용하는 이유는 주로 외부 의존성을 격리하기 위해서입니다. 실제 객체를 사용하면 데이터베이스, 네트워크 통신 등 통제하기 어려운 요소에 의존하게 되어 테스트가 불안정해지고 느려질 수 있습니다.
Mock이나 Stub은 이러한 의존성을 가짜 객체로 대체하여 테스트 대상 코드에 집중하고, 예측 가능한 결과를 얻도록 도와줍니다. 예를 들어, 데이터베이스에 접근하는 코드를 테스트할 때 Mock 객체를 사용하여 데이터베이스 연결 없이 미리 정의된 데이터를 반환하도록 설정할 수 있습니다.
반면, 실제 객체를 사용하는 경우는 통합 테스트나 인수 테스트처럼 전체 시스템의 동작을 검증해야 할 때 유용합니다. 단위 테스트에서는 격리를 통해 테스트의 독립성과 속도를 높이는 것이 중요하기 때문에 Mock이나 Stub을 사용하는 것이 일반적입니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 테스트 (TDD / BDD) 면접 질문
- TDD를 프로젝트에 적용했을 때 얻을 수 있는 주요 이점과 발생할 수 있는 잠재적인 어려움은 무엇인가요?
- BDD(Behavior-Driven Development)는 TDD와 어떤 점에서 차이가 있으며, BDD가 강조하는 주요 가치는 무엇인가요?
- BDD 시나리오 작성 시 사용되는 Given-When-Then 구조에 대해 설명하고, 이 구조가 협업에 어떤 도움을 주는지 이야기해주세요.
- TDD/BDD 관점에서 단위 테스트, 통합 테스트, E2E 테스트의 적절한 비중과 각각의 역할에 대해 설명해주세요.
- 테스트 더블(Test Double)의 개념과 종류(Dummy, Fake, Stub, Spy, Mock)에 대해 간략히 설명하고, 각각의 사용 사례를 예시로 들어주세요.
- TDD/BDD가 시스템 아키텍처 설계에 미치는 심층적인 영향은 무엇이며, 특히 모듈성, 응집도, 결합도 측면에서 어떤 변화를 가져온다고 생각하십니까? 실제 프로젝트에서 이러한 영향을 어떻게 경험하셨습니까?