패스잇
개발 문화 · 협업 · 심화

복잡한 시스템에서 TDD를 수행할 때, 과도한 Mocking/Stubbing은 테스트의 실제 가치를 떨어뜨리거나 유지보수를 어렵게 만들 수 있습니다. Mocking/Stubbing의 적절한 사용 시점과 범위는 무엇이며, Mocking 프레임워크를 효과적으로 활용하면서도 Mocking Anti-patterns(예: Excessive Mocking, Mocking Private Methods)를 피하기 위한 전략은 무엇입니까?

힌트 · 협력 객체 테스트, 실제 객체 사용 시점, Mocking vs. Stubbing 차이, 테스트 더블의 목적을 명확히 하고 안티패턴 회피 전략을 제시해야 합니다.

행동 검증상태 검증테스트 격리통합 테스트Dependency Injection

모범답안

TDD에서 Mocking/Stubbing은 격리된 단위 테스트를 위해 필수적이지만, 과도하면 오히려 독이 될 수 있습니다. 적절한 사용 시점은 협력 객체의 행동을 검증해야 할 때입니다. 즉, 특정 객체가 다른 객체에게 올바른 메시지를 전달했는지 확인하는 것이죠.

반면, 객체의 상태 변화를 검증하는 경우에는 실제 객체를 사용하는 것이 좋습니다. Stubbing은 단순히 값을 반환하는 용도로 사용하고, Mocking은 행동 검증에 집중해야 합니다.

Mocking Anti-patterns를 피하려면,

  1. 테스트 대상을 명확히 하고, 그 대상의 협력 객체만 Mocking합니다.
  2. Dependency Injection을 활용하여 Mocking을 쉽게 만듭니다.
  3. 통합 테스트를 통해 단위 테스트의 한계를 보완합니다.

Private Method Mocking은 최대한 피하고, 리팩토링을 통해 테스트 가능한 구조로 변경하는 것을 고려해야 합니다.

읽었다면, 이제 직접 답해볼 차례예요

패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.

함께 보는 테스트 (TDD / BDD) 면접 질문

← 테스트 (TDD / BDD) 면접 질문 전체 보기