test: 테스트 파일 추가 및 리팩토링 반영

- combat_calculator_test, skill_service_test, stat_calculator_test 추가
- mock_factories.dart 헬퍼 추가
- progress_loop_test, game_session_controller_test 서비스 분리 반영
This commit is contained in:
JiWoong Sul
2026-01-15 01:53:51 +09:00
parent c33c1ff470
commit a41984d998
7 changed files with 1576 additions and 138 deletions

View File

@@ -1,17 +1,12 @@
import 'package:asciineverdie/l10n/app_localizations.dart';
import 'package:asciineverdie/src/core/engine/game_mutations.dart';
import 'package:asciineverdie/src/core/engine/progress_service.dart';
import 'package:asciineverdie/src/core/engine/reward_service.dart';
import 'package:asciineverdie/src/core/model/game_state.dart';
import 'package:asciineverdie/src/core/model/pq_config.dart';
import 'package:asciineverdie/src/core/storage/save_manager.dart';
import 'package:asciineverdie/src/core/storage/save_repository.dart';
import 'package:asciineverdie/src/core/storage/save_service.dart';
import 'package:asciineverdie/src/features/game/game_play_screen.dart';
import 'package:asciineverdie/src/features/game/game_session_controller.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import '../helpers/mock_factories.dart';
/// 테스트용 MaterialApp 래퍼 (localization 포함)
Widget _buildTestApp(Widget child) {
return MaterialApp(
@@ -21,33 +16,6 @@ Widget _buildTestApp(Widget child) {
);
}
class _FakeSaveManager implements SaveManager {
@override
Future<SaveOutcome> saveState(
GameState state, {
String? fileName,
bool cheatsEnabled = false,
}) async {
return const SaveOutcome.success();
}
@override
Future<(SaveOutcome, GameState?, bool)> loadState({String? fileName}) async {
return (const SaveOutcome.success(), null, false);
}
@override
Future<List<SaveFileInfo>> listSaves() async => [];
@override
Future<SaveOutcome> deleteSave({String? fileName}) async {
return const SaveOutcome.success();
}
@override
Future<bool> saveExists({String? fileName}) async => false;
}
GameState _createTestState() {
return GameState.withSeed(
seed: 42,
@@ -83,15 +51,9 @@ GameState _createTestState() {
}
GameSessionController _createController() {
const config = PqConfig();
final mutations = GameMutations(config);
return GameSessionController(
progressService: ProgressService(
config: config,
mutations: mutations,
rewards: RewardService(mutations, config),
),
saveManager: _FakeSaveManager(),
progressService: MockFactories.createProgressService(),
saveManager: FakeSaveManager(),
tickInterval: const Duration(seconds: 10), // 느린 틱
);
}

View File

@@ -1,58 +1,12 @@
import 'package:asciineverdie/src/core/engine/game_mutations.dart';
import 'package:asciineverdie/src/core/engine/progress_service.dart';
import 'package:asciineverdie/src/core/engine/reward_service.dart';
import 'package:asciineverdie/src/core/model/game_state.dart';
import 'package:asciineverdie/src/core/model/pq_config.dart';
import 'package:asciineverdie/src/core/storage/save_manager.dart';
import 'package:asciineverdie/src/core/storage/save_repository.dart';
import 'package:asciineverdie/src/core/storage/save_service.dart';
import 'package:asciineverdie/src/features/game/game_session_controller.dart';
import 'package:fake_async/fake_async.dart';
import 'package:flutter_test/flutter_test.dart';
class FakeSaveManager implements SaveManager {
final List<GameState> savedStates = [];
(SaveOutcome, GameState?, bool) Function(String?)? onLoad;
SaveOutcome saveOutcome = const SaveOutcome.success();
@override
Future<SaveOutcome> saveState(
GameState state, {
String? fileName,
bool cheatsEnabled = false,
}) async {
savedStates.add(state);
return saveOutcome;
}
@override
Future<(SaveOutcome, GameState?, bool)> loadState({String? fileName}) async {
if (onLoad != null) {
return onLoad!(fileName);
}
return (const SaveOutcome.success(), null, false);
}
@override
Future<List<SaveFileInfo>> listSaves() async => [];
@override
Future<SaveOutcome> deleteSave({String? fileName}) async {
return const SaveOutcome.success();
}
@override
Future<bool> saveExists({String? fileName}) async => false;
}
import '../helpers/mock_factories.dart';
void main() {
const config = PqConfig();
final mutations = GameMutations(config);
final progressService = ProgressService(
config: config,
mutations: mutations,
rewards: RewardService(mutations, config),
);
final progressService = MockFactories.createProgressService();
GameSessionController buildController(
FakeAsync async,