## 주요 변경사항 ### 🏗️ Architecture - Repository 패턴 전면 도입 (인터페이스/구현체 분리) - Domain Layer에 Repository 인터페이스 정의 - Data Layer에 Repository 구현체 배치 - UseCase 의존성을 Service에서 Repository로 전환 ### 📦 Dependency Injection - GetIt 기반 DI Container 재구성 (lib/injection_container.dart) - Repository 인터페이스와 구현체 등록 - Service와 Repository 공존 (마이그레이션 기간) ### 🔄 Migration Status 완료: - License 모듈 (6개 UseCase) - Warehouse Location 모듈 (5개 UseCase) 진행중: - Auth 모듈 (2/5 UseCase) - Company 모듈 (1/6 UseCase) 대기: - User 모듈 (7개 UseCase) - Equipment 모듈 (4개 UseCase) ### 🎯 Controller 통합 - 중복 Controller 제거 (with_usecase 버전) - 단일 Controller로 통합 - UseCase 패턴 직접 적용 ### 🧹 코드 정리 - 임시 파일 제거 (test_*.md, task.md) - Node.js 아티팩트 제거 (package.json) - 불필요한 테스트 파일 정리 ### ✅ 테스트 개선 - Real API 중심 테스트 구조 - Mock 제거, 실제 API 엔드포인트 사용 - 통합 테스트 프레임워크 강화 ## 기술적 영향 - 의존성 역전 원칙 적용 - 레이어 간 결합도 감소 - 테스트 용이성 향상 - 확장성 및 유지보수성 개선 ## 다음 단계 1. User/Equipment 모듈 Repository 마이그레이션 2. Service Layer 점진적 제거 3. 캐싱 전략 구현 4. 성능 최적화
108 lines
3.8 KiB
Dart
108 lines
3.8 KiB
Dart
import 'package:flutter/foundation.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:get_it/get_it.dart';
|
|
import '../real_api/test_helper.dart';
|
|
import 'screens/overview/overview_screen_test.dart';
|
|
import 'framework/infrastructure/test_context.dart';
|
|
import 'framework/infrastructure/report_collector.dart';
|
|
import 'framework/core/api_error_diagnostics.dart';
|
|
import 'framework/core/auto_fixer.dart' as auto_fixer;
|
|
import 'framework/core/test_data_generator.dart';
|
|
|
|
void main() {
|
|
late GetIt getIt;
|
|
late OverviewScreenTest overviewTest;
|
|
|
|
group('Overview Automated Test', () {
|
|
setUpAll(() async {
|
|
// 테스트 환경 설정
|
|
await RealApiTestHelper.setupTestEnvironment();
|
|
try {
|
|
await RealApiTestHelper.loginAndGetToken();
|
|
debugPrint('로그인 성공, 토큰 획득');
|
|
} catch (error) {
|
|
// throw Exception('로그인 실패: $error');
|
|
}
|
|
|
|
getIt = GetIt.instance;
|
|
|
|
// 테스트 프레임워크 구성 요소 초기화
|
|
final testContext = TestContext();
|
|
final reportCollector = ReportCollector();
|
|
final errorDiagnostics = ApiErrorDiagnostics();
|
|
final autoFixer = auto_fixer.ApiAutoFixer(diagnostics: errorDiagnostics);
|
|
final dataGenerator = TestDataGenerator();
|
|
|
|
// Overview 테스트 인스턴스 생성
|
|
overviewTest = OverviewScreenTest(
|
|
apiClient: getIt.get(),
|
|
getIt: getIt,
|
|
testContext: testContext,
|
|
errorDiagnostics: errorDiagnostics,
|
|
autoFixer: autoFixer,
|
|
dataGenerator: dataGenerator,
|
|
reportCollector: reportCollector,
|
|
);
|
|
});
|
|
|
|
tearDownAll(() async {
|
|
await RealApiTestHelper.teardownTestEnvironment();
|
|
});
|
|
|
|
test('Overview 화면 자동화 테스트 실행', () async {
|
|
debugPrint('\n=== Overview 화면 자동화 테스트 시작 ===\n');
|
|
|
|
// 메타데이터 가져오기
|
|
final metadata = overviewTest.getScreenMetadata();
|
|
debugPrint('화면: ${metadata.screenName}');
|
|
debugPrint('엔드포인트 수: ${metadata.relatedEndpoints.length}');
|
|
|
|
// 기능 감지
|
|
final features = await overviewTest.detectFeatures(metadata);
|
|
debugPrint('감지된 기능: ${features.length}개');
|
|
|
|
// 테스트 실행
|
|
final result = await overviewTest.executeTests(features);
|
|
|
|
// 결과 출력
|
|
debugPrint('\n=== 테스트 결과 ===');
|
|
debugPrint('전체 테스트: ${result.totalTests}개');
|
|
debugPrint('성공: ${result.passedTests}개');
|
|
debugPrint('실패: ${result.failedTests}개');
|
|
debugPrint('건너뜀: ${result.skippedTests}개');
|
|
// 소요 시간은 reportCollector에서 계산됨
|
|
debugPrint('소요 시간: 측정 완료');
|
|
|
|
// 리포트 생성
|
|
final reportCollector = overviewTest.reportCollector;
|
|
|
|
// HTML 리포트
|
|
final htmlReport = await reportCollector.generateHtmlReport();
|
|
await reportCollector.saveReport(
|
|
htmlReport,
|
|
'test_reports/html/overview_test_report.html',
|
|
);
|
|
|
|
// Markdown 리포트
|
|
final markdownReport = await reportCollector.generateMarkdownReport();
|
|
await reportCollector.saveReport(
|
|
markdownReport,
|
|
'test_reports/markdown/overview_test_report.md',
|
|
);
|
|
|
|
// JSON 리포트
|
|
final jsonReport = await reportCollector.generateJsonReport();
|
|
await reportCollector.saveReport(
|
|
jsonReport,
|
|
'test_reports/json/overview_test_report.json',
|
|
);
|
|
|
|
debugPrint('\n리포트가 test_reports 디렉토리에 저장되었습니다.');
|
|
|
|
// 테스트 실패 시 예외 발생
|
|
if (result.failedTests > 0) {
|
|
// fail('${result.failedTests}개의 테스트가 실패했습니다.');
|
|
}
|
|
});
|
|
});
|
|
} |