다음 함수/기능에 대한 테스트 케이스를 작성해주세요:
```
[테스트할 코드 붙여넣기]
```
테스트 프레임워크: [Jest/Mocha/PyTest 등]
테스트 유형: [단위/통합/E2E]
## 🧪 테스트 케이스
### 📋 테스트 개요
- **테스트 대상:** [함수/클래스/모듈명]
- **테스트 유형:** [단위/통합/E2E]
- **프레임워크:** [프레임워크명]
- **커버리지 목표:** [%]
### ✅ 정상 케이스 (Happy Path)
#### 테스트 1: 기본 동작 확인
```javascript
describe('[함수명] 기본 동작', () => {
test('정상적인 입력값으로 올바른 결과 반환', () => {
// Given
const input = [테스트 데이터];
const expected = [예상 결과];
// When
const result = [함수명](input);
// Then
expect(result).toBe(expected);
});
});
```
#### 테스트 2: 경계값 테스트
```javascript
test('경계값에서 올바른 동작', () => {
const borderCases = [
{ input: [경계값1], expected: [예상결과1] },
{ input: [경계값2], expected: [예상결과2] }
];
borderCases.forEach(({ input, expected }) => {
expect([함수명](input)).toBe(expected);
});
});
```
### ❌ 예외 케이스 (Error Cases)
#### 테스트 3: 잘못된 입력값
```javascript
test('잘못된 입력값에 대한 에러 처리', () => {
const invalidInputs = [null, undefined, '', -1];
invalidInputs.forEach(input => {
expect(() => [함수명](input)).toThrow('[에러메시지]');
});
});
```
#### 테스트 4: 타입 에러
```javascript
test('잘못된 타입 입력시 TypeError 발생', () => {
expect(() => [함수명]('string')).toThrow(TypeError);
expect(() => [함수명]({})).toThrow(TypeError);
});
```
### 🔄 통합 테스트
#### 테스트 5: 의존성과의 상호작용
```javascript
describe('의존성 모듈과의 통합', () => {
let mockDependency;
beforeEach(() => {
mockDependency = jest.fn();
});
test('의존성 모듈 호출 확인', () => {
// Given
mockDependency.mockReturnValue([모킹 결과]);
// When
[함수명]([입력값]);
// Then
expect(mockDependency).toHaveBeenCalledWith([예상 파라미터]);
});
});
```
### 📊 성능 테스트
#### 테스트 6: 실행 시간 측정
```javascript
test('성능 요구사항 만족', () => {
const startTime = performance.now();
[함수명]([대용량 데이터]);
const endTime = performance.now();
const executionTime = endTime - startTime;
expect(executionTime).toBeLessThan(1000); // 1초 이내
});
```
### 🎯 테스트 데이터
```javascript
const testData = {
valid: [
{ input: [값1], expected: [결과1] },
{ input: [값2], expected: [결과2] }
],
invalid: [
null, undefined, '', -1, NaN
],
edge: [
{ input: [최소값], expected: [결과] },
{ input: [최대값], expected: [결과] }
]
};
```
### 📋 테스트 체크리스트
- [ ] 정상 동작 확인
- [ ] 경계값 테스트
- [ ] 예외 상황 처리
- [ ] 타입 검증
- [ ] 성능 요구사항
- [ ] 의존성 모킹
- [ ] 코드 커버리지 확인