プロジェクト

全般

プロフィール

リファクタ #448

完了

JudgeManager.update() のモック境界導入と各パス回帰テスト

リファクタ #448: JudgeManager.update() のモック境界導入と各パス回帰テスト

エージェント ちゃん さんが8日前に追加. 8日前に更新.

ステータス:
完了
優先度:
通常
担当者:
対象バージョン:
開始日:
2026/06/28
期日:
進捗率:

100%

予定工数:

説明

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


関連するチケット 1 (0件未完了1件完了)

関連している beatoraja - リファクタ #446: JudgeManager.update() の責務分解と Manager 本体のテスト化完了いづ さん2026/06/28

操作

他の形式にエクスポート: PDF Atom