Files
superport/TEST_PROGRESS.md
JiWoong Sul d6f34c0a52 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>
2025-07-31 20:37:26 +09:00

5.4 KiB

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 사용)
  • 성능 테스트

🛠️ 사용된 기술 스택

테스트 프레임워크

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 사용 시 주의점

setUp(() {
  getIt = setupTestGetIt(); // 반드시 첫 번째로
  // Mock 서비스 등록
});

tearDown(() {
  getIt.reset(); // 반드시 실행
});

Mock 데이터 생성

// 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);

테스트 실행

# 모든 테스트 실행
flutter test

# 특정 파일 테스트
flutter test test/unit/controllers/company_list_controller_test.dart

# 커버리지 포함
flutter test --coverage

🔗 관련 문서


이 문서는 지속적으로 업데이트됩니다. 마지막 업데이트: 2025-07-31