[typescript] 타입스크립트 단위 테스트 작성 시 테스트 더블(Test Double) 종류

단위 테스트(Unit Test)는 소프트웨어의 특정 기능이 올바로 작동하는지를 검증하는 데 사용됩니다. 테스트 더블(Test Double)은 실제 의존성을 대신하여 테스트를 간단하게 만들고 테스트의 격리성 및 신속성을 향상시키는 데 사용됩니다. 타입스크립트(TypeScript)로 단위 테스트를 작성할 때 다양한 종류의 테스트 더블이 필요할 수 있습니다.

목차

  1. 테스트 더블이란?
  2. 다양한 테스트 더블 종류

테스트 더블이란?

테스트 더블은 주로 실제 의존성을 대신하여 테스트를 간단하게 만들고 격리된 환경에서 코드를 테스트하고자 할 때 사용됩니다. 다양한 상황과 목적에 따라 테스트 더블의 종류를 알고 사용하는 것이 중요합니다.

다양한 테스트 더블 종류

1. 테스트 스파이

테스트 스파이(Test Spy)는 실제 객체의 특정 동작을 감시하거나 기록하는 데 사용됩니다. 주로 메서드 호출 여부, 호출 횟수, 매개변수 등을 테스트하는 데 유용합니다.

예시 코드:

// 메서드 호출을 기록하는 테스트 스파이
class UserServiceSpy {
  private log: string[] = [];

  public logMethodCall(methodName: string, params: any): void {
    this.log.push(`${methodName} was called with params: ${params}`);
  }

  public getCallLog(): string[] {
    return this.log;
  }
}

2. 테스트 스텁

테스트 스텁(Test Stub)은 특정 동작이나 값을 반환하여 의존성을 대체하는 데 사용됩니다. 실제 의존성을 대신하여 의도된 동작을 테스트하는 데 유용합니다.

예시 코드:

// 사용자 목업 데이터를 반환하는 테스트 스텁
class UserServiceStub {
  public getUserById(id: number) {
    return { id, name: 'John Doe' }; // 미리 정의된 사용자 데이터 반환
  }
}

3. 테스트 모의체

테스트 모의체(Test Mock)는 기대되는 상호작용을 가정하고, 실제 의존성이 호출될 때 기대하는 동작을 검증하는 데 사용됩니다. 주로 특정 메서드 호출 여부, 호출 횟수, 매개변수 등을 테스트하는 데 유용합니다.

예시 코드:

// 사용자 서비스를 위한 테스트 모의체
class UserServiceMock {
  public getUserById = jest.fn();
}

결론

단위 테스트 작성 시, 테스트 더블을 적절히 활용하여 의존성을 대체하고 코드의 격리성 및 신속성을 향상시킬 수 있습니다. 다양한 상황에 따라 테스트 스파이, 테스트 스텁, 테스트 모의체 등을 사용하여 효과적인 단위 테스트를 작성할 수 있습니다.

이상으로, 타입스크립트 단위 테스트를 위한 다양한 테스트 더블 종류에 대한 내용을 정리해보았습니다. 감사합니다.

참고 자료