[javascript] Mocha에서 사용하는 테스트 더블(Test Double)의 종류는?

Mocha는 JavaScript 테스트 프레임워크로, 테스트 더블(Test Double)을 사용하여 효과적이고 유연한 테스트 작성을 가능하게 합니다. 테스트 더블은 실제 객체의 대역으로 동작하며, 외부 의존성을 모의(mock), 가짜(fakes), 스텁(stubs), 스파이(spies) 등으로 대체하여 테스트를 진행할 수 있습니다.

테스트 더블의 주요 종류는 다음과 같습니다:

  1. Mocks (모의)
    • 실제 객체와 동일한 인터페이스를 가지고 있는 객체를 생성하여, 메소드 호출 등 객체의 상호작용을 모방합니다.
    • 메소드가 호출되었을 때 기대하는 값을 반환하거나, 호출 횟수를 체크하는 등의 검증을 수행할 수 있습니다.
    • 예시코드:
      const mockObject = sinon.createStubInstance(MyClass);
      mockObject.method.returns(42);
      
  2. Fakes (가짜)
    • 실제 객체와 유사한 동작을 하는, 단순한 대체 객체입니다.
    • 실제 시스템과 같은 입력/출력을 다룰 수 있으며, 의존성을 제거하여 자체 테스트 환경에서 독립적으로 동작합니다.
    • 예시코드:
      const fakeObject = {
      method: (param) => {
        // 가짜 구현
      }
      }
      
  3. Stubs (스텁)
    • 특정 메소드에 대한 고정된 동작을 가지는 객체입니다.
    • 메소드가 호출되었을 때 반환값이나 예외를 설정하여, 특정 시나리오를 테스트할 수 있습니다.
    • 예시코드:
      const stubObject = sinon.stub(service, 'method').returns(42);
      
  4. Spies (스파이)
    • 메소드 호출에 대한 정보를 기록하고, 추적할 수 있는 객체입니다.
    • 메소드가 호출되었을 때 얼마나 많이 호출되었는지, 특정 매개변수로 호출되었는지 등을 확인합니다.
    • 예시코드:
      const spyObject = sinon.spy(service, 'method');
      

Mocha에서 이러한 다양한 테스트 더블을 활용하여 테스트 코드를 작성하면 실제 객체에 의존하는 테스트의 한계를 극복하고, 보다 견고하고 유연한 테스트를 구현할 수 있습니다.

자세한 내용은 Mocha 공식 문서를 참고하시기 바랍니다.