logo

Mocking과 Stubbing - 테스트 격리와 제어

2026-02-10
TESTINGMOCKINGSTUBBING

Mocking과 Stubbing은 테스트를 격리하고 외부 의존성을 제어하는 방법입니다.
이 글에서는 Jest, Sinon 등을 활용한 모킹 패턴을 정리합니다.


1. Mock vs Stub vs Spy

  • Mock: 행동을 검증하는 가짜 객체
  • Stub: 특정 값을 반환하는 가짜 객체
  • Spy: 실제 함수 호출을 추적

2. Jest Mock

// 함수 모킹 const mockFn = jest.fn(); mockFn("arg"); expect(mockFn).toHaveBeenCalledWith("arg"); // 모듈 모킹 jest.mock("./api", () => ({ fetchUser: jest.fn(), }));

3. Sinon Stub

const sinon = require("sinon"); const api = require("./api"); const stub = sinon.stub(api, "fetchUser"); stub.returns(Promise.resolve({ id: 1, name: "kwkang" }));

4. 실무 패턴

// 시간 모킹 jest.useFakeTimers(); jest.advanceTimersByTime(1000); // HTTP 요청 모킹 global.fetch = jest.fn(() => Promise.resolve({ json: () => Promise.resolve({ data: "test" }), }) );

5. 실무 팁

  1. 최소한의 모킹: 필요한 부분만 모킹
  2. 실제 구현 유사: Mock이 실제 구현과 유사하게 동작
  3. 정리: 테스트 후 Mock 정리 (afterEach)

모킹은 "테스트를 격리하고 제어한다"는 철학을 따릅니다.

me

강경원