操作
リファクタ #448
完了JudgeManager.update() のモック境界導入と各パス回帰テスト
リファクタ #448:
JudgeManager.update() のモック境界導入と各パス回帰テスト
説明
Redmine #446 からの派生タスク(#446 で先送りした重い部分)。
背景¶
#174 → #446 と段階的に JudgeManager の純粋ロジックを挙動不変で切り出し、Manager 層のテストを拡充してきた。
- #174:
ComboState/JudgeLaneColor/JudgeRecentTimingBufferを抽出。 - #446:
update()に重複していた LN/CN/HCN 分類述語をLongNoteTypeに、判定ウィンドウ線形走査をJudgeWindowに集約し、全組合せの単体テストを追加。
しかし update()(約430行)本体は依然 BMSPlayer / MainController / TimerManager / BMSPlayerInputProcessor / AudioDriver / GrooveGauge に深く結合しており、入力処理・LN/CN/HCN 状態機械・autoplay・見逃しPOOR の各パスを直接回帰テストできていない。
対応内容¶
- 上記コラボレータにモック境界(seam)を導入する(インターフェース抽出、もしくは Mockito 等のモック機構の導入)。
-
update()の以下の各パスについて、挙動を変えずに回帰テストを追加する:- LN 押し / 離し
- CN / HCN(HCN ゲージ増減・通過判定含む)
- BSS(スクラッチ複合)
- オートプレイ
- 見逃しPOOR
- 判定タイミング、ゲージ/スコア連携、タイマー連携に回帰がないことを担保する。
補足¶
本件はゲームプレイ中核(判定タイミングの厳密一致が必須)への改変であり、設計影響が広い。着手前にモック方式(インターフェース抽出 vs モックライブラリ導入)の設計方針を検討すること。#446 までで純粋ロジックの抽出と単体テスト化は完了済み。
エージェント ちゃん さんが8日前に更新
- 関連している リファクタ #446: JudgeManager.update() の責務分解と Manager 本体のテスト化 を追加
エージェント ちゃん さんが8日前に更新
- ステータス を 未着手 から 実装中 に変更
- 進捗率 を 0 から 10 に変更
実装に着手しました。
- ブランチ:
feature/448 - 対応方針:
JudgeManagerのコラボレータ(BMSPlayer/MainController/TimerManager/Input/AudioDriver/GrooveGauge 等)をJudgeContextシーム interface として抽出し、本番は BMSPlayer 委譲アダプタ・テストは fake を注入。update()の挙動を変えず LN押し/離し・CN/HCN・BSS・オートプレイ・見逃しPOOR の各パスへ直接回帰テストを追加する。
エージェント ちゃん さんが8日前に更新
- ステータス を 実装中 から 完了 に変更
- 進捗率 を 10 から 100 に変更
対応が完了しました。
概要¶
JudgeManager.update() が深く結合していたコラボレータ(BMSPlayer/MainController/TimerManager/Input/AudioDriver/GrooveGauge 等)を JudgeContext シーム interface として抽出し、update() の各パスを実 BMSPlayer 無しで直接回帰テストできるようにした。挙動は完全不変。
変更点¶
-
JudgeContextinterface を新設し、init()/update()/updateMicro()のコラボレータ参照を集約。本番はBMSPlayerJudgeContext(BMSPlayer への1対1委譲)、テストは fake を注入。 -
JudgeManagerのmain.x/timer.x/input.x等をcontext.xへ機械的に置換(参照経路の差し替えのみ・ロジック/順序/条件は不変)。テスト用 package-private コンストラクタJudgeManager(JudgeContext)を追加。 - fake コンテキスト(
FakeJudgeContext/RecordingAudioDriver)と実 BMSModel/TimeLine/Note フィクスチャによる回帰テスト6本を追加(通常+見逃しPOOR / LN押し離し / CN / HCN(ゲージ増減・通過判定) / BSS / オートプレイ)。 - 変更ファイル:
src/bms/player/beatoraja/play/JudgeContext.java(新規) /BMSPlayerJudgeContext.java(新規) /JudgeManager.java(変更) /src/test/java/bms/player/beatoraja/play/{FakeJudgeContext,RecordingAudioDriver,JudgeManagerUpdateTest}.java(新規) 計6件。
テスト¶
-
.\gradlew.bat test: 成功(全件グリーン)。JudgeManagerUpdateTestは tests=6 / skipped=0 / failures=0 / errors=0。既存テストも回帰なし。
関連 MR¶
- !126 (feature/448 → develop)
操作