[typescript] 타입스크립트에서의 스텁 (Stub) 개념과 활용법 이해하기

타입스크립트에서 스텁은 테스트에서 실제 코드를 대체하여 모의(mock) 객체나 메소드를 만들어주는 개념입니다. 스텁은 특정한 시나리오에 따른 테스트를 작성할 때 유용하게 활용될 수 있습니다. 이번 글에서는 타입스크립트에서의 스텁 개념과 활용법에 대해 살펴보겠습니다.

스텁의 이점

1. 의존성 제거: 외부 서비스나 모듈에 의존하는 코드를 테스트할 때, 스텁을 활용하여 의존성을 제거하고 테스트를 단순화할 수 있습니다. 이렇게 함으로써 테스트의 안정성과 신뢰도를 높일 수 있습니다.

2. 병목 현상 제거: 실제 외부 리소스에 의한 지연 현상을 피하고 테스트 속도를 높일 수 있습니다. 스텁을 사용하여 가짜 데이터를 생성하여 느린 외부 소스를 대체함으로써 효율적인 테스트를 할 수 있습니다.

3. 특정 상황 시나리오 테스트: 특정한 상황에 대한 테스트를 원할 경우, 해당 상황을 시뮬레이션하여 테스트할 수 있습니다.

타입스크립트에서의 스텁 사용 예시

아래는 타입스크립트에서의 스텁을 사용한 간단한 예시 코드입니다.

// UserService.ts
export class UserService {
  async getUser(id: number): Promise<User> {
    // 외부 API 호출 등의 로직
  }
}

// UserStub.ts
export class UserStub {
  async getUser(id: number): Promise<User> {
    return { id, name: "John Doe" }; // 스텁 데이터 반환
  }
}

// UserTest.ts
import { UserService } from './UserService';
import { UserStub } from './UserStub';

const userService = new UserService();
const userStub = new UserStub();

// 테스트 시 실제 UserService 대신 UserStub을 사용
const user = await userStub.getUser(123);
// 테스트 코드 작성

위의 예시에서 UserStub 클래스는 UserServicegetUser 메소드를 대신하여 스텁 데이터를 반환합니다. 이를 활용하여 간단한 테스트를 작성할 수 있습니다.

결론

스텁은 테스트 코드 작성 시에 외부 의존성을 관리하고 특정한 시나리오를 테스트하는 데 유용한 도구입니다. 타입스크립트에서도 스텁을 적절히 활용하여 효율적이고 안정적인 테스트를 작성할 수 있습니다.