test: 통합 테스트 오류 및 경고 수정
Some checks failed
Flutter Test & Quality Check / Test on macos-latest (push) Has been cancelled
Flutter Test & Quality Check / Test on ubuntu-latest (push) Has been cancelled
Flutter Test & Quality Check / Build APK (push) Has been cancelled

- 모든 서비스 메서드 시그니처를 실제 구현에 맞게 수정
- 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:
JiWoong Sul
2025-08-05 20:24:05 +09:00
parent d6f34c0a52
commit 198aac6525
145 changed files with 41527 additions and 5220 deletions

View File

@@ -3,6 +3,11 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:get_it/get_it.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:provider/provider.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:mocktail/mocktail.dart';
// FlutterSecureStorage Mock 클래스
class MockFlutterSecureStorage extends Mock implements FlutterSecureStorage {}
/// 테스트용 GetIt 인스턴스 초기화
GetIt setupTestGetIt() {
@@ -11,6 +16,19 @@ GetIt setupTestGetIt() {
// 기존 등록된 서비스들 모두 제거
getIt.reset();
// FlutterSecureStorage mock 등록
final mockSecureStorage = MockFlutterSecureStorage();
when(() => mockSecureStorage.read(key: any(named: 'key')))
.thenAnswer((_) async => null);
when(() => mockSecureStorage.write(key: any(named: 'key'), value: any(named: 'value')))
.thenAnswer((_) async {});
when(() => mockSecureStorage.delete(key: any(named: 'key')))
.thenAnswer((_) async {});
when(() => mockSecureStorage.deleteAll())
.thenAnswer((_) async {});
getIt.registerSingleton<FlutterSecureStorage>(mockSecureStorage);
return getIt;
}
@@ -24,13 +42,13 @@ class TestWidgetWrapper extends StatelessWidget {
final String? initialRoute;
const TestWidgetWrapper({
Key? key,
super.key,
required this.child,
this.providers,
this.navigatorObserver,
this.routes,
this.initialRoute,
}) : super(key: key);
});
@override
Widget build(BuildContext context) {
@@ -75,14 +93,25 @@ Future<void> pumpTestWidget(
NavigatorObserver? navigatorObserver,
Map<String, WidgetBuilder>? routes,
String? initialRoute,
Size? screenSize,
}) async {
// 화면 크기 설정
if (screenSize != null) {
tester.view.physicalSize = screenSize;
tester.view.devicePixelRatio = 1.0;
} else {
// 기본값: 태블릿 크기 (테이블 UI를 위해 충분한 크기)
tester.view.physicalSize = const Size(1024, 768);
tester.view.devicePixelRatio = 1.0;
}
await tester.pumpWidget(
TestWidgetWrapper(
child: widget,
providers: providers,
navigatorObserver: navigatorObserver,
routes: routes,
initialRoute: initialRoute,
child: widget,
),
);
}
@@ -109,7 +138,6 @@ Future<void> enterTextByLabel(
if (textFieldFinder.evaluate().isEmpty) {
// 라벨로 찾지 못한 경우, 가까운 TextFormField 찾기
final labelWidget = find.text(label);
final textField = find.byType(TextFormField).first;
await tester.enterText(textField, text);
} else {