[typescript] 테스트 더블 (Mock, Stub, Spy) 개념과 활용법 이해하기
목차
- 테스트 더블 소개
- Mock, Stub, Spy의 개념
- 각 더블의 활용법
- Jest를 활용한 예시
테스트 더블 소개
테스트 더블은 실제 의존성을 대체하는 객체를 가리키는 용어로, 소프트웨어 테스트에서 의존성을 가짜로 대체하여 테스트를 간단하게 만들어줍니다. 이는 테스트 환경을 구축할 때 실제 의존성을 가진 객체를 제거하여 테스트를 빠르고 격리된 환경에서 진행할 수 있도록 합니다.
Mock, Stub, Spy의 개념
- Mock: 호출 여부, 호출 횟수, 호출 순서 같은 동작을 확인할 수 있는 가짜 객체로, 특정 메서드를 호출하면 원하는 값을 반환하게끔 설정할 수 있습니다.
- Stub: 특정 메서드를 호출했을 때 기대하는 반환값을 설정하여 실제 구현을 대체하는 가짜 객체로, 해당 메서드가 호출되었을 때 특정 값이 반환되도록 설정할 수 있습니다.
- Spy: 실제 메서드와 동일하지만 호출 여부, 호출 횟수 등을 확인하는 객체로, 해당 메서드가 호출되었을 때 정보를 기록하여 나중에 확인할 수 있습니다.
각 더블의 활용법
- Mock: API 호출 확인, 메서드 호출 순서 확인 및 반환값 설정에 활용됩니다.
- Stub: 외부 의존성을 가짜로 대체하여 가정된 값으로 테스트하는 데에 사용됩니다.
- Spy: 메서드 호출 여부, 횟수, 전달된 인자 등을 확인하고 기록하는 데에 활용됩니다.
Jest를 활용한 예시
// UserService.ts
export default class UserService {
public getUserById(id: number): User {
// Implementation to retrieve user by id from database
}
}
// User.spec.ts
import UserService from './UserService';
test('getUserById should be called once', () => {
const userService = new UserService();
const spy = jest.spyOn(userService, 'getUserById');
userService.getUserById(1);
expect(spy).toHaveBeenCalledTimes(1);
});
위 예시에서는 Jest를 사용하여 UserService의 getUserById 메서드가 한 번 호출되었는지를 확인하는데 Spy를 활용하였습니다. 이를 통해 getUserById 메서드의 호출 여부를 확인하고 기록할 수 있습니다.
테스트 더블(Mock, Stub, Spy) 개념을 활용하면 복잡한 의존성을 가진 객체를 간단히 대체하여 테스트를 수행할 수 있습니다. 이를 통해 효과적인 유닛 테스트를 작성할 수 있으며, 코드의 품질과 안정성을 향상시킬 수 있습니다.
이상으로 테스트 더블에 대한 개념과 활용법에 대해 살펴보았습니다. 부족한 부분이 있다면 추가 조사 후 보완하도록 하겠습니다.