操作
リファクタ #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 までで純粋ロジックの抽出と単体テスト化は完了済み。
操作