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:
174
test/helpers/simple_mock_services.dart
Normal file
174
test/helpers/simple_mock_services.dart
Normal file
@@ -0,0 +1,174 @@
|
||||
import 'package:mockito/annotations.dart';
|
||||
import 'package:mockito/mockito.dart';
|
||||
import 'package:superport/services/auth_service.dart';
|
||||
import 'package:superport/services/company_service.dart';
|
||||
import 'package:superport/services/equipment_service.dart';
|
||||
import 'package:superport/services/mock_data_service.dart';
|
||||
import 'package:superport/services/user_service.dart';
|
||||
import 'package:superport/data/models/auth/auth_user.dart';
|
||||
import 'package:superport/models/user_model.dart';
|
||||
|
||||
import 'mock_data_helpers.dart';
|
||||
import 'simple_mock_services.mocks.dart';
|
||||
|
||||
// Mockito 어노테이션으로 Mock 클래스 생성
|
||||
@GenerateMocks([
|
||||
AuthService,
|
||||
CompanyService,
|
||||
MockDataService,
|
||||
EquipmentService,
|
||||
UserService,
|
||||
])
|
||||
void main() {}
|
||||
|
||||
/// 간단한 Mock 서비스 설정 헬퍼
|
||||
class SimpleMockServiceHelpers {
|
||||
/// AuthService Mock 설정
|
||||
static void setupAuthServiceMock(
|
||||
MockAuthService mockAuthService, {
|
||||
bool isLoggedIn = false,
|
||||
}) {
|
||||
// isLoggedIn
|
||||
when(mockAuthService.isLoggedIn())
|
||||
.thenAnswer((_) async => isLoggedIn);
|
||||
|
||||
// getCurrentUser
|
||||
when(mockAuthService.getCurrentUser())
|
||||
.thenAnswer((_) async => isLoggedIn ? AuthUser(
|
||||
id: 1,
|
||||
username: 'test_user',
|
||||
name: '테스트 사용자',
|
||||
email: 'test@example.com',
|
||||
role: 'admin',
|
||||
) : null);
|
||||
}
|
||||
|
||||
/// CompanyService Mock 설정
|
||||
static void setupCompanyServiceMock(
|
||||
MockCompanyService mockCompanyService, {
|
||||
bool getCompaniesSuccess = true,
|
||||
bool deleteCompanySuccess = true,
|
||||
int companyCount = 10,
|
||||
}) {
|
||||
// getCompanies
|
||||
if (getCompaniesSuccess) {
|
||||
when(mockCompanyService.getCompanies(
|
||||
page: anyNamed('page'),
|
||||
perPage: anyNamed('perPage'),
|
||||
search: anyNamed('search'),
|
||||
isActive: anyNamed('isActive'),
|
||||
)).thenAnswer((_) async =>
|
||||
MockDataHelpers.createMockCompanyList(count: companyCount),
|
||||
);
|
||||
} else {
|
||||
when(mockCompanyService.getCompanies(
|
||||
page: anyNamed('page'),
|
||||
perPage: anyNamed('perPage'),
|
||||
search: anyNamed('search'),
|
||||
isActive: anyNamed('isActive'),
|
||||
)).thenThrow(
|
||||
Exception('회사 목록을 불러오는 중 오류가 발생했습니다.'),
|
||||
);
|
||||
}
|
||||
|
||||
// deleteCompany
|
||||
if (deleteCompanySuccess) {
|
||||
when(mockCompanyService.deleteCompany(any))
|
||||
.thenAnswer((_) async {});
|
||||
} else {
|
||||
when(mockCompanyService.deleteCompany(any))
|
||||
.thenThrow(
|
||||
Exception('회사 삭제 중 오류가 발생했습니다.'),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/// MockDataService Mock 설정
|
||||
static void setupMockDataServiceMock(
|
||||
MockMockDataService mockDataService, {
|
||||
int companyCount = 10,
|
||||
int userCount = 10,
|
||||
}) {
|
||||
when(mockDataService.getAllCompanies()).thenReturn(
|
||||
MockDataHelpers.createMockCompanyList(count: companyCount)
|
||||
);
|
||||
|
||||
when(mockDataService.deleteCompany(any)).thenReturn(null);
|
||||
|
||||
when(mockDataService.getAllUsers()).thenReturn(
|
||||
MockDataHelpers.createMockUserModelList(count: userCount)
|
||||
);
|
||||
|
||||
when(mockDataService.deleteUser(any)).thenReturn(null);
|
||||
|
||||
when(mockDataService.getCompanyById(any)).thenAnswer((invocation) {
|
||||
final id = invocation.positionalArguments[0] as int;
|
||||
final companies = MockDataHelpers.createMockCompanyList(count: companyCount);
|
||||
return companies.firstWhere(
|
||||
(c) => c.id == id,
|
||||
orElse: () => MockDataHelpers.createMockCompany(id: id),
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
/// UserService Mock 설정
|
||||
static void setupUserServiceMock(
|
||||
MockUserService mockUserService, {
|
||||
bool getUsersSuccess = true,
|
||||
bool deleteUserSuccess = true,
|
||||
bool changeUserStatusSuccess = true,
|
||||
int userCount = 10,
|
||||
}) {
|
||||
// getUsers
|
||||
if (getUsersSuccess) {
|
||||
when(mockUserService.getUsers(
|
||||
page: anyNamed('page'),
|
||||
perPage: anyNamed('perPage'),
|
||||
isActive: anyNamed('isActive'),
|
||||
companyId: anyNamed('companyId'),
|
||||
role: anyNamed('role'),
|
||||
)).thenAnswer((_) async =>
|
||||
MockDataHelpers.createMockUserModelList(count: userCount),
|
||||
);
|
||||
} else {
|
||||
when(mockUserService.getUsers(
|
||||
page: anyNamed('page'),
|
||||
perPage: anyNamed('perPage'),
|
||||
isActive: anyNamed('isActive'),
|
||||
companyId: anyNamed('companyId'),
|
||||
role: anyNamed('role'),
|
||||
)).thenThrow(
|
||||
Exception('사용자 목록을 불러오는 중 오류가 발생했습니다.'),
|
||||
);
|
||||
}
|
||||
|
||||
// deleteUser
|
||||
if (deleteUserSuccess) {
|
||||
when(mockUserService.deleteUser(any))
|
||||
.thenAnswer((_) async {});
|
||||
} else {
|
||||
when(mockUserService.deleteUser(any))
|
||||
.thenThrow(
|
||||
Exception('사용자 삭제 중 오류가 발생했습니다.'),
|
||||
);
|
||||
}
|
||||
|
||||
// changeUserStatus
|
||||
if (changeUserStatusSuccess) {
|
||||
when(mockUserService.changeUserStatus(any, any))
|
||||
.thenAnswer((invocation) async {
|
||||
final id = invocation.positionalArguments[0] as int;
|
||||
final isActive = invocation.positionalArguments[1] as bool;
|
||||
return MockDataHelpers.createMockUserModel(
|
||||
id: id,
|
||||
isActive: isActive,
|
||||
);
|
||||
});
|
||||
} else {
|
||||
when(mockUserService.changeUserStatus(any, any))
|
||||
.thenThrow(
|
||||
Exception('사용자 상태 변경 중 오류가 발생했습니다.'),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user