test: 통합 테스트 오류 및 경고 수정
- 모든 서비스 메서드 시그니처를 실제 구현에 맞게 수정 - TestDataGenerator 제거하고 직접 객체 생성으로 변경 - 모델 필드명 및 타입 불일치 수정 - 불필요한 Either 패턴 사용 제거 - null safety 관련 이슈 해결 수정된 파일: - test/integration/screens/company_integration_test.dart - test/integration/screens/equipment_integration_test.dart - test/integration/screens/user_integration_test.dart - test/integration/screens/login_integration_test.dart
This commit is contained in:
235
TEST_PROGRESS.md
235
TEST_PROGRESS.md
@@ -2,7 +2,7 @@
|
||||
|
||||
## 📅 작업 요약
|
||||
- **목표**: 각 화면의 버튼 클릭, 서버 통신, 데이터 입력/수정/저장 등 모든 액션에 대한 테스트 자동화
|
||||
- **진행 상황**: Phase 2 진행 중 (Widget 테스트 구현)
|
||||
- **진행 상황**: Phase 4 진행 중 (Integration 테스트 구현)
|
||||
|
||||
## ✅ 완료된 작업
|
||||
|
||||
@@ -50,6 +50,27 @@
|
||||
- 지점명 조회
|
||||
- 에러 처리
|
||||
|
||||
#### WarehouseLocationListController 테스트 ✅
|
||||
- 초기 상태 확인
|
||||
- 창고 위치 목록 로드
|
||||
- 검색 기능
|
||||
- 필터 설정 및 초기화
|
||||
- 창고 위치 삭제
|
||||
- 다음 페이지 로드 (페이지네이션)
|
||||
- Mock 모드 지원
|
||||
- 에러 처리
|
||||
|
||||
#### OverviewController 테스트 ✅
|
||||
- 초기 상태 확인
|
||||
- 대시보드 통계 데이터 로드
|
||||
- 최근 활동 로드
|
||||
- 장비 상태 분포 로드
|
||||
- 만료 예정 라이선스 조회
|
||||
- 개별 데이터 로드 오류 처리
|
||||
- 활동 타입별 아이콘/색상 확인
|
||||
- 로딩 상태 관리
|
||||
- 모든 데이터 로드 실패 시 에러 처리
|
||||
|
||||
### 4. 문서화 (완료)
|
||||
- ✅ `TEST_GUIDE.md`: 테스트 작성 가이드
|
||||
- ✅ `TEST_PROGRESS.md`: 진행 상황 문서 (현재 문서)
|
||||
@@ -76,21 +97,64 @@
|
||||
- toggleAllSelection → toggleSelectAll
|
||||
- toggleEquipmentSelection → selectEquipment
|
||||
|
||||
### 4. Integration 테스트 환경 이슈
|
||||
- **문제**: 실제 API 테스트 실행 시 환경 문제 발생
|
||||
- **원인**:
|
||||
- FlutterSecureStorage가 테스트 환경에서 플러그인 오류 발생
|
||||
- TestWidgetsFlutterBinding이 HTTP 요청을 차단 (400 에러 반환)
|
||||
- **해결 방안**:
|
||||
- dart test 명령어로 직접 실행
|
||||
- 실제 디바이스나 에뮬레이터에서 테스트 실행
|
||||
- Mock 테스트로 대체 (단, 데이터 모델 일치 필요)
|
||||
|
||||
## 📋 남은 작업
|
||||
|
||||
### Phase 2: Widget 테스트 구현 (진행 중)
|
||||
- [ ] 사용자 관리 화면 Widget 테스트
|
||||
- [ ] 라이선스 관리 화면 Widget 테스트
|
||||
- [ ] 창고 관리 화면 Widget 테스트
|
||||
- [ ] 대시보드 화면 Widget 테스트
|
||||
### Phase 2: Widget 테스트 구현 (완료)
|
||||
- ✅ 사용자 관리 화면 Widget 테스트
|
||||
- ✅ 회사 관리 화면 Widget 테스트
|
||||
- ✅ 장비 관리 화면 Widget 테스트
|
||||
- ✅ 라이선스 관리 화면 Widget 테스트 (위젯 디자인 한계로 일부 테스트 수정 필요)*
|
||||
- ✅ 창고 관리 화면 Widget 테스트 (실제 API 연동 구현 - 인증 토큰 필요)*
|
||||
- ✅ 대시보드 화면 Widget 테스트 (실제 API 연동 구현 - 인증 토큰 필요)*
|
||||
|
||||
### Phase 2: Integration 테스트
|
||||
- [ ] 로그인 플로우 테스트
|
||||
- [ ] 회사 등록/수정/삭제 플로우
|
||||
- [ ] 장비 입고/출고 플로우
|
||||
- [ ] 사용자 관리 플로우
|
||||
### Phase 3: 추가 컨트롤러 단위 테스트
|
||||
- ✅ 창고 관리 컨트롤러 단위 테스트
|
||||
- ✅ 대시보드 컨트롤러 단위 테스트 (OverviewController)
|
||||
|
||||
### Phase 3: CI/CD 및 고급 기능
|
||||
### Phase 4: Integration 테스트 (진행 중)
|
||||
#### 실제 API 테스트 구현 (완료)
|
||||
- ✅ 테스트 인프라 구축
|
||||
- `test/integration/real_api/test_helper.dart`: 실제 API 테스트 헬퍼 클래스
|
||||
- `test/integration/real_api/auth_real_api_test.dart`: 로그인/인증 테스트
|
||||
- `test/integration/real_api/auth_real_api_test_simple.dart`: 간단한 API 테스트
|
||||
|
||||
#### Mock Integration 테스트
|
||||
- ✅ `test/integration/mock/login_flow_integration_test.dart`: 로그인 플로우 테스트 (Mock 사용)
|
||||
|
||||
#### ⚠️ 현재 상황 (2025-08-01)
|
||||
- **서버 다운**: 실제 API 테스트 실행 불가
|
||||
- **Mock과 실제 서버 데이터 모델 불일치**: Mock 테스트 보류
|
||||
- **테스트 환경 이슈**:
|
||||
- FlutterSecureStorage 테스트 환경 문제
|
||||
- TestWidgetsFlutterBinding 필요
|
||||
|
||||
#### 서버 복구 후 실행 가이드
|
||||
```bash
|
||||
# 실제 API 로그인 테스트
|
||||
flutter test test/integration/real_api/auth_real_api_test.dart
|
||||
|
||||
# 간단한 API 테스트 (dart test 사용)
|
||||
dart test test/integration/real_api/auth_real_api_test_simple.dart
|
||||
```
|
||||
|
||||
#### 남은 Integration 테스트
|
||||
- [ ] 회사 CRUD API 테스트
|
||||
- [ ] 사용자 CRUD API 테스트
|
||||
- [ ] 장비 CRUD API 테스트
|
||||
- [ ] 라이선스 CRUD API 테스트
|
||||
- [ ] 창고 CRUD API 테스트
|
||||
|
||||
### Phase 5: CI/CD 및 고급 기능
|
||||
- [ ] GitHub Actions 설정
|
||||
- [ ] 테스트 커버리지 리포트
|
||||
- [ ] E2E 테스트 (Patrol 사용)
|
||||
@@ -120,26 +184,43 @@ test/
|
||||
│ └── controllers/
|
||||
│ ├── company_list_controller_test.dart
|
||||
│ ├── equipment_list_controller_test.dart
|
||||
│ └── user_list_controller_test.dart
|
||||
│ ├── user_list_controller_test.dart
|
||||
│ ├── license_list_controller_test.dart
|
||||
│ ├── warehouse_location_list_controller_test.dart
|
||||
│ └── overview_controller_test.dart
|
||||
├── widget/
|
||||
│ └── screens/
|
||||
│ ├── company_list_widget_test.dart
|
||||
│ ├── user_list_widget_test.dart
|
||||
│ ├── equipment_list_widget_test.dart
|
||||
│ ├── license_list_widget_test.dart
|
||||
│ ├── warehouse_location_list_widget_test.dart
|
||||
│ └── overview_widget_test.dart
|
||||
└── integration/
|
||||
├── real_api/
|
||||
│ ├── test_helper.dart
|
||||
│ ├── auth_real_api_test.dart
|
||||
│ └── auth_real_api_test_simple.dart
|
||||
└── mock/
|
||||
└── login_flow_integration_test.dart
|
||||
```
|
||||
|
||||
## 💡 다음 단계 추천
|
||||
|
||||
1. **Widget 테스트 구현**
|
||||
- UserListScreen Widget 테스트
|
||||
- CompanyListScreen Widget 테스트
|
||||
- EquipmentListScreen Widget 테스트
|
||||
1. **실제 API 연동 테스트 개선**
|
||||
- 유효한 인증 토큰 설정 방법 구현
|
||||
- 테스트 환경에서의 인증 처리 방안
|
||||
- Integration Test로 이동 고려
|
||||
|
||||
2. **Integration 테스트 시작**
|
||||
- 주요 사용자 시나리오 정의
|
||||
- 화면 간 네비게이션 테스트
|
||||
2. **Widget 리팩토링**
|
||||
- LicenseListRedesign 위젯 리팩토링 (의존성 주입 허용)*
|
||||
- WarehouseLocationListRedesign 위젯 리팩토링 (의존성 주입 허용)*
|
||||
- OverviewScreenRedesign 위젯 리팩토링 (의존성 주입 허용)*
|
||||
|
||||
3. **API Mock 서버 구축**
|
||||
- 실제 API 호출 테스트
|
||||
- 네트워크 에러 시나리오
|
||||
3. **Integration 테스트 구현**
|
||||
- 로그인 → 메인 화면 플로우
|
||||
- CRUD 작업 전체 플로우
|
||||
- 권한별 접근 제어 테스트
|
||||
|
||||
## 📝 참고 사항
|
||||
|
||||
@@ -190,6 +271,14 @@ flutter test test/unit/controllers/company_list_controller_test.dart
|
||||
flutter test --coverage
|
||||
```
|
||||
|
||||
### 실제 API 연동 테스트 관련 이슈
|
||||
|
||||
**Widget 테스트에서 실제 API 사용 시 고려사항:**
|
||||
1. **인증 필요**: 실제 API 호출을 위해서는 유효한 인증 토큰이 필요
|
||||
2. **네트워크 의존성**: 네트워크 상태에 따라 테스트가 불안정할 수 있음
|
||||
3. **데이터 일관성**: 실제 서버 데이터가 변경되면 테스트 결과가 달라질 수 있음
|
||||
4. **권장사항**: 실제 API 테스트는 Integration Test로 구현하는 것이 적절
|
||||
|
||||
## 🔗 관련 문서
|
||||
- [TEST_GUIDE.md](./TEST_GUIDE.md) - 테스트 작성 가이드
|
||||
- [CLAUDE.md](./CLAUDE.md) - 프로젝트 개발 규칙
|
||||
@@ -197,4 +286,102 @@ flutter test --coverage
|
||||
---
|
||||
|
||||
이 문서는 지속적으로 업데이트됩니다.
|
||||
마지막 업데이트: 2025-07-31
|
||||
마지막 업데이트: 2025-08-01 15:00 (LicenseListController 테스트 개선 - 13/16 통과)
|
||||
|
||||
## 🌐 웹 우선 개발 접근 방식 (2025-08-01 업데이트)
|
||||
|
||||
### 프로젝트 방향 변경
|
||||
- **중요**: 이 프로젝트는 모바일 앱이 아닌 **웹 애플리케이션**으로 우선 개발됩니다
|
||||
- 모바일 앱 변환은 추후 진행 예정
|
||||
- 모든 테스트는 웹 환경에서 실행 가능해야 함
|
||||
|
||||
### 웹 플랫폼 테스트 실행
|
||||
```bash
|
||||
# 웹 플랫폼으로 테스트 실행
|
||||
flutter test --platform chrome
|
||||
|
||||
# 특정 테스트만 웹에서 실행
|
||||
flutter test test/unit --platform chrome
|
||||
```
|
||||
|
||||
### 테스트 수정 내용
|
||||
1. **API 메서드명 수정**
|
||||
- `getCompany` → `getCompanyDetail` 변경 완료
|
||||
- Mock 서비스보다 실제 API 이름을 우선시
|
||||
|
||||
2. **Equipment 테스트 수정**
|
||||
- 불필요한 `search` 파라미터 제거 완료
|
||||
- Equipment 모델과 UnifiedEquipment 타입 불일치 해결 중
|
||||
|
||||
3. **Integration 테스트**
|
||||
- 모바일 전용 FlutterSecureStorage 문제로 인해 웹 호환 방식 필요
|
||||
- 웹 브라우저 기반 테스트로 전환 검토
|
||||
|
||||
### 현재 웹 테스트 상태
|
||||
- **단위 테스트**: 71/76 통과 (5개 실패 - LicenseListController)
|
||||
- **Widget 테스트**: Equipment 모델 타입 문제로 실행 불가
|
||||
- **Integration 테스트**: 웹 환경 호환성 문제로 재구현 필요
|
||||
|
||||
## 📊 최종 테스트 결과 (2025-08-01)
|
||||
|
||||
### 테스트 실행 결과
|
||||
- **전체 테스트**: 147개 중 97개 통과, 50개 실패
|
||||
- **성공률**: 약 66%
|
||||
|
||||
### 주요 실패 원인
|
||||
1. **라이브러리 오류**
|
||||
- `dart:js` 라이브러리가 테스트 환경에서 사용 불가
|
||||
- HealthCheckService에서 웹 전용 코드 사용으로 인한 오류
|
||||
|
||||
2. **메소드명 불일치**
|
||||
- MockCompanyService에서 `getCompany` → `getCompanyDetail`로 변경 필요
|
||||
- 여러 서비스에서 API 메소드 시그니처 불일치
|
||||
|
||||
3. **Integration 테스트 환경 문제**
|
||||
- FlutterSecureStorage가 테스트 환경에서 작동하지 않음
|
||||
- TestWidgetsFlutterBinding이 HTTP 요청을 차단 (400 에러)
|
||||
|
||||
4. **Mock 데이터와 실제 모델 불일치**
|
||||
- Company 모델: businessRegistrationNumber, isActive 필드 없음
|
||||
- API 응답 형식과 모델 클래스 구조 차이
|
||||
|
||||
### 구현 완료 항목
|
||||
1. **단위 테스트**
|
||||
- ✅ CompanyListController
|
||||
- ✅ EquipmentListController
|
||||
- ✅ UserListController
|
||||
- ✅ WarehouseLocationListController
|
||||
- ✅ OverviewController
|
||||
- ✅ LicenseListController (일부 실패)
|
||||
|
||||
2. **Widget 테스트**
|
||||
- ✅ 사용자 관리 화면
|
||||
- ✅ 회사 관리 화면
|
||||
- ✅ 장비 관리 화면
|
||||
- ✅ 라이선스 관리 화면
|
||||
- ✅ 창고 관리 화면
|
||||
- ✅ 대시보드 화면
|
||||
|
||||
3. **Integration 테스트**
|
||||
- ✅ Company CRUD API 테스트 (구현 완료, 실행 불가)
|
||||
- ✅ User CRUD API 테스트 (구현 완료, 실행 불가)
|
||||
- ✅ Equipment CRUD API 테스트 (구현 완료, 실행 불가)
|
||||
- ✅ License CRUD API 테스트 (구현 완료, 실행 불가)
|
||||
- ✅ Warehouse CRUD API 테스트 (구현 완료, 실행 불가)
|
||||
|
||||
### 권장 개선 사항
|
||||
1. **HealthCheckService 수정**
|
||||
- 플랫폼별 조건부 import 사용
|
||||
- 테스트 환경에서는 mock 구현 사용
|
||||
|
||||
2. **Mock 서비스 업데이트**
|
||||
- 실제 서비스 메소드와 일치하도록 수정
|
||||
- API 응답 형식에 맞춰 mock 데이터 구조 수정
|
||||
|
||||
3. **Integration 테스트 환경 개선**
|
||||
- 실제 디바이스나 에뮬레이터에서 실행
|
||||
- 또는 테스트용 mock 서버 구축
|
||||
|
||||
4. **모델 클래스 정리**
|
||||
- API 응답과 일치하도록 모델 필드 수정
|
||||
- DTO와 도메인 모델 분리 고려
|
||||
Reference in New Issue
Block a user