test: 테스트 자동화 구현 및 Mock 서비스 오류 수정
- 테스트 패키지 추가 (mockito, golden_toolkit, patrol 등) - 테스트 가이드 문서 작성 (TEST_GUIDE.md) - 테스트 진행 상황 문서 작성 (TEST_PROGRESS.md) - 테스트 헬퍼 클래스 구현 - test_helpers.dart: 기본 테스트 유틸리티 - mock_data_helpers.dart: Mock 데이터 생성 헬퍼 - mock_services.dart: Mock 서비스 설정 (오류 수정 완료) - simple_mock_services.dart: 간단한 Mock 서비스 - 단위 테스트 구현 - CompanyListController 테스트 - EquipmentListController 테스트 - UserListController 테스트 - Widget 테스트 구현 (CompanyListScreen) Mock 서비스 주요 수정사항: - dartz import 추가 - Either 타입 제거 (실제 서비스와 일치하도록) - 메서드 시그니처 수정 (실제 서비스 인터페이스와 일치) - Mock 데이터 생성 메서드 추가 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
200
TEST_PROGRESS.md
Normal file
200
TEST_PROGRESS.md
Normal file
@@ -0,0 +1,200 @@
|
||||
# Flutter 테스트 자동화 진행 상황
|
||||
|
||||
## 📅 작업 요약
|
||||
- **목표**: 각 화면의 버튼 클릭, 서버 통신, 데이터 입력/수정/저장 등 모든 액션에 대한 테스트 자동화
|
||||
- **진행 상황**: Phase 2 진행 중 (Widget 테스트 구현)
|
||||
|
||||
## ✅ 완료된 작업
|
||||
|
||||
### 1. Phase 1: 프로젝트 분석 및 설정 (완료)
|
||||
- ✅ 코드베이스 분석 및 프로젝트 구조 파악
|
||||
- ✅ 모든 화면(Screen/Page) 파일 식별 및 목록화
|
||||
- ✅ API 서비스 및 네트워크 통신 구조 분석
|
||||
- ✅ 테스트 패키지 설치 및 환경 설정
|
||||
|
||||
### 2. 테스트 인프라 구축 (완료)
|
||||
- ✅ 테스트 디렉토리 구조 설계
|
||||
- ✅ 테스트 헬퍼 클래스 생성
|
||||
- `test_helpers.dart`: 기본 테스트 유틸리티
|
||||
- `mock_data_helpers.dart`: Mock 데이터 생성
|
||||
- `simple_mock_services.dart`: Mock 서비스 설정
|
||||
- ✅ Mock 클래스 생성 (build_runner 사용)
|
||||
|
||||
### 3. 단위 테스트 구현 (진행 중)
|
||||
#### CompanyListController 테스트 ✅
|
||||
- 검색 키워드 업데이트
|
||||
- 회사 선택/해제
|
||||
- 전체 선택/해제
|
||||
- 필터 적용
|
||||
- 회사 삭제
|
||||
- 에러 처리
|
||||
|
||||
#### EquipmentListController 테스트 ✅
|
||||
- 장비 선택/해제
|
||||
- 전체 선택
|
||||
- 상태 필터 변경
|
||||
- 장비 삭제
|
||||
- 선택된 장비 수 계산
|
||||
- 에러 처리
|
||||
|
||||
#### UserListController 테스트 ✅
|
||||
- 초기 상태 확인
|
||||
- 사용자 목록 로드
|
||||
- 검색 쿼리 설정 및 검색
|
||||
- 필터 설정 (회사, 권한, 활성 상태)
|
||||
- 필터 초기화
|
||||
- 사용자 삭제
|
||||
- 사용자 상태 변경
|
||||
- 페이지네이션 (더 불러오기)
|
||||
- Mock 모드 필터링
|
||||
- 지점명 조회
|
||||
- 에러 처리
|
||||
|
||||
### 4. 문서화 (완료)
|
||||
- ✅ `TEST_GUIDE.md`: 테스트 작성 가이드
|
||||
- ✅ `TEST_PROGRESS.md`: 진행 상황 문서 (현재 문서)
|
||||
|
||||
## 🔧 해결된 주요 이슈
|
||||
|
||||
### 1. 모델 불일치 문제
|
||||
- **문제**: Mock 데이터 모델과 실제 프로젝트 모델 구조 차이
|
||||
- **해결**:
|
||||
- Address 모델: streetAddress → zipCode/region/detailAddress
|
||||
- User 모델: companyId 필수 파라미터 추가
|
||||
- AuthUser vs User 타입 정리
|
||||
|
||||
### 2. 서비스 시그니처 불일치
|
||||
- **문제**: Mock 서비스 메서드와 실제 서비스 메서드 시그니처 차이
|
||||
- **해결**:
|
||||
- CompanyService.getCompanies 파라미터 수정
|
||||
- EquipmentService 반환 타입 정리
|
||||
- Clean Architecture 패턴 제거 (Either → 직접 반환)
|
||||
|
||||
### 3. Controller 메서드명 차이
|
||||
- **문제**: 테스트에서 사용한 메서드가 실제 컨트롤러에 없음
|
||||
- **해결**:
|
||||
- toggleAllSelection → toggleSelectAll
|
||||
- toggleEquipmentSelection → selectEquipment
|
||||
|
||||
## 📋 남은 작업
|
||||
|
||||
### Phase 2: Widget 테스트 구현 (진행 중)
|
||||
- [ ] 사용자 관리 화면 Widget 테스트
|
||||
- [ ] 라이선스 관리 화면 Widget 테스트
|
||||
- [ ] 창고 관리 화면 Widget 테스트
|
||||
- [ ] 대시보드 화면 Widget 테스트
|
||||
|
||||
### Phase 2: Integration 테스트
|
||||
- [ ] 로그인 플로우 테스트
|
||||
- [ ] 회사 등록/수정/삭제 플로우
|
||||
- [ ] 장비 입고/출고 플로우
|
||||
- [ ] 사용자 관리 플로우
|
||||
|
||||
### Phase 3: CI/CD 및 고급 기능
|
||||
- [ ] GitHub Actions 설정
|
||||
- [ ] 테스트 커버리지 리포트
|
||||
- [ ] E2E 테스트 (Patrol 사용)
|
||||
- [ ] 성능 테스트
|
||||
|
||||
## 🛠️ 사용된 기술 스택
|
||||
|
||||
### 테스트 프레임워크
|
||||
```yaml
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
sdk: flutter
|
||||
mockito: ^5.4.5
|
||||
build_runner: ^2.4.9
|
||||
get_it: ^7.7.0
|
||||
```
|
||||
|
||||
### 테스트 구조
|
||||
```
|
||||
test/
|
||||
├── helpers/
|
||||
│ ├── test_helpers.dart
|
||||
│ ├── mock_data_helpers.dart
|
||||
│ ├── simple_mock_services.dart
|
||||
│ └── simple_mock_services.mocks.dart
|
||||
├── unit/
|
||||
│ └── controllers/
|
||||
│ ├── company_list_controller_test.dart
|
||||
│ ├── equipment_list_controller_test.dart
|
||||
│ └── user_list_controller_test.dart
|
||||
├── widget/
|
||||
│ └── screens/
|
||||
└── integration/
|
||||
```
|
||||
|
||||
## 💡 다음 단계 추천
|
||||
|
||||
1. **Widget 테스트 구현**
|
||||
- UserListScreen Widget 테스트
|
||||
- CompanyListScreen Widget 테스트
|
||||
- EquipmentListScreen Widget 테스트
|
||||
|
||||
2. **Integration 테스트 시작**
|
||||
- 주요 사용자 시나리오 정의
|
||||
- 화면 간 네비게이션 테스트
|
||||
|
||||
3. **API Mock 서버 구축**
|
||||
- 실제 API 호출 테스트
|
||||
- 네트워크 에러 시나리오
|
||||
|
||||
## 📝 참고 사항
|
||||
|
||||
### GetIt 사용 시 주의점
|
||||
```dart
|
||||
setUp(() {
|
||||
getIt = setupTestGetIt(); // 반드시 첫 번째로
|
||||
// Mock 서비스 등록
|
||||
});
|
||||
|
||||
tearDown(() {
|
||||
getIt.reset(); // 반드시 실행
|
||||
});
|
||||
```
|
||||
|
||||
### Mock 데이터 생성
|
||||
```dart
|
||||
// Company 목록
|
||||
final companies = MockDataHelpers.createMockCompanyList(count: 5);
|
||||
|
||||
// UnifiedEquipment 생성
|
||||
final equipment = MockDataHelpers.createMockUnifiedEquipment(
|
||||
id: 1,
|
||||
name: '노트북',
|
||||
status: 'I', // 입고 상태
|
||||
);
|
||||
|
||||
// User 모델 생성
|
||||
final user = MockDataHelpers.createMockUserModel(
|
||||
id: 1,
|
||||
name: '테스트 사용자',
|
||||
role: 'S', // S: 관리자, M: 멤버
|
||||
);
|
||||
|
||||
// User 목록 생성
|
||||
final users = MockDataHelpers.createMockUserModelList(count: 10);
|
||||
```
|
||||
|
||||
### 테스트 실행
|
||||
```bash
|
||||
# 모든 테스트 실행
|
||||
flutter test
|
||||
|
||||
# 특정 파일 테스트
|
||||
flutter test test/unit/controllers/company_list_controller_test.dart
|
||||
|
||||
# 커버리지 포함
|
||||
flutter test --coverage
|
||||
```
|
||||
|
||||
## 🔗 관련 문서
|
||||
- [TEST_GUIDE.md](./TEST_GUIDE.md) - 테스트 작성 가이드
|
||||
- [CLAUDE.md](./CLAUDE.md) - 프로젝트 개발 규칙
|
||||
|
||||
---
|
||||
|
||||
이 문서는 지속적으로 업데이트됩니다.
|
||||
마지막 업데이트: 2025-07-31
|
||||
Reference in New Issue
Block a user