개발 문화 · 협업 · 기초
테스트 더블(Test Double)이란 무엇이며, 왜 사용하는지 설명해주세요.
힌트 · 테스트 대상이 의존하는 객체를 가짜 객체로 대체하여 테스트 환경을 격리하고 제어하기 위해 사용됩니다. 외부 시스템이나 복잡한 의존성으로부터 테스트를 독립적으로 만듭니다.
테스트 격리의존성 분리예측 가능한 결과테스트 용이성모의 객체 (Mock Object)
모범답안
테스트 더블은 테스트를 진행할 때, 테스트 대상 객체가 의존하는 객체를 대신하는 가짜 객체입니다. 마치 영화 촬영장에서 배우를 대신하는 스턴트맨과 비슷하다고 생각하시면 됩니다.
테스트 더블을 사용하는 이유는 크게 두 가지입니다. 첫째, 테스트 격리를 위해서입니다. 외부 시스템이나 데이터베이스처럼 불안정하거나 느린 의존성으로부터 테스트를 분리하여, 테스트가 항상 빠르고 예측 가능한 결과를 내도록 합니다. 둘째, 테스트 용이성을 높이기 위해서입니다. 아직 구현되지 않았거나 복잡한 의존성을 가진 객체를 테스트 더블로 대체하여, 테스트를 더 쉽게 작성하고 실행할 수 있습니다.
예를 들어, 데이터베이스에 접근하는 코드를 테스트할 때, 실제 데이터베이스 대신 메모리 기반의 테스트 더블을 사용하면 훨씬 빠르고 안정적인 테스트가 가능합니다. 모의 객체(Mock Object)는 테스트 더블의 한 종류이며, 특정 메서드가 호출되었는지, 어떤 인자로 호출되었는지 등을 검증하는 데 사용됩니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 테스트 (TDD / BDD) 면접 질문
- TDD(Test-Driven Development)는 무엇이며, TDD의 기본적인 개발 주기(Cycle)는 어떻게 되나요?
- TDD를 적용했을 때 얻을 수 있는 주요 이점들은 무엇인가요?
- BDD(Behavior-Driven Development)는 무엇이며, TDD와 비교했을 때 어떤 특징이 있나요?
- TDD의 Red-Green-Refactor 사이클을 설명하고, 각 단계에서 개발자가 수행해야 할 주요 활동과 그 중요성에 대해 이야기해주세요.
- TDD를 프로젝트에 적용했을 때 얻을 수 있는 주요 이점과 발생할 수 있는 잠재적인 어려움은 무엇인가요?
- BDD(Behavior-Driven Development)는 TDD와 어떤 점에서 차이가 있으며, BDD가 강조하는 주요 가치는 무엇인가요?