操作
リファクタ #455
完了skin property: 分割前の先行互換テストを整備する(Phase 0)
リファクタ #455:
skin property: 分割前の先行互換テストを整備する(Phase 0)
説明
#176 の整理方針に基づく Phase 0。責務分割・共通化の前に、現状の振る舞いをロックする互換テストを先に追加する。後続リファクタ(Phase 1〜3)の安全網となる。
背景¶
既存の SkinPropertyFactoryRegistryTest は enum 登録(ValueType / FloatType / RateType / StringType / IndexType / BooleanType / EventType)の id・name 解決を網羅しているが、以下は未カバーの seam:
-
IntegerPropertyFactory#getIntegerProperty0/BooleanPropertyFactory#getBooleanProperty0の巨大 switch フォールバックの各 case。 - 算術範囲ハンドラ(judge / key / player offset、
NUMBER_PERFECT2〜、NUMBER_RELEASE_SPEED_KEY*等のif (optionid >= X && optionid <= Y)ブロック)の解決と値。 -
SkinPropertyMapperの id 算術ヘルパ。
対応内容¶
-
switch 経路の網羅:
getIntegerProperty0/getBooleanProperty0(および String / Float のフォールバック)の全 case が id から non-null 解決されることを検証するテストを追加。 - 算術範囲の検証: judge/key/player offset 系の代表的な id が解決され、期待値を返すことを検証。
-
SkinPropertyMapper の round-trip テスト:
keyJudgeValueId↔getKeyJudgeValuePlayer/getKeyJudgeValueOffset、bombTimerId/holdTimerIdの境界、isCustomTimerId/isCustomEventIdの範囲、getSkinSelectType↔skinSelectTypeIdの round-trip。 -
ゴールデン契約テスト: 同梱の
skin/default配下の JSON スキン(追跡済 27 ファイル)を読み、参照される全 property name / id が non-null 解決されることを assert。誤削除・誤リネームを検出できる。
確認観点¶
- このチケットはテスト追加のみで本体コードは変えない(現状振る舞いのロックが目的)。
- JSON / LR2 / Lua の互換を崩さないことをテストで表現する。
エージェント ちゃん さんが8日前に更新
- 関連している リファクタ #176: skin property 定義群の肥大化を整理する方針を作る を追加
エージェント ちゃん さんが8日前に更新
- 次のチケットに先行 リファクタ #454: skin property: id→property の二重経路(switch vs enum)を単一化する(Phase 1) を追加
エージェント ちゃん さんが8日前に更新
- ステータス を 未着手 から 実装中 に変更
- 進捗率 を 0 から 10 に変更
実装に着手しました。
- ブランチ:
feature/455 - 対応方針: Phase 0 の互換テストを追加。
getIntegerProperty0/getBooleanProperty0の switch 全 case の id 解決、judge/key/release-speed 等の算術範囲の解決と期待値、SkinPropertyMapperの id 算術 round-trip、同梱skin/defaultJSON スキンのプロパティ参照が全て non-null 解決されるゴールデン契約テストを整備する(本体コードは変更しない)。
エージェント ちゃん さんが8日前に更新
- ステータス を 実装中 から 完了 に変更
- 進捗率 を 10 から 100 に変更
対応が完了しました。
概要¶
skin property 定義群の責務分割リファクタ(#176 Phase 1〜3)の前に、現状の振る舞いをロックする互換テストを整備した Phase 0。誤削除・誤リネームを検出する安全網を追加。テスト追加のみで本体コード(production)は無改変。
変更点¶
-
SkinPropertyFallbackResolutionTest:getIntegerProperty0/getBooleanProperty0の全 switch case(およびOPTION_COURSE_STAGE範囲)が id から non-null 解決されることを検証(負 id 反転含む)。 -
SkinPropertyArithmeticRangeTest: judge / rival / release-speed 等7つの算術範囲の全 id 解決+ ScoreData ベースの MainState による期待値検証。 -
SkinPropertyMapperTest:keyJudgeValueId/ timer-id 6種 /skinSelectTypeの round-trip、isCustomTimerId/isCustomEventIdの境界。 -
DefaultSkinPropertyContractTest: 追跡済み13個のskin/defaultJSON スキンのゴールデン契約テスト。value / floatvalue / text の ref と destination の op が全て factory 経由で non-null 解決されることを検証。ローダーの解決経路(JsonSkinSerializer再利用・lua 非依存)に忠実。STRING_SEARCHWORDsentinel と未宣言カスタムオプション(900-999)は設計上 null が正しいため除外。 - 追加ファイル:
src/test/java/bms/player/beatoraja/skin/property/配下の上記4クラス(計508行、227テスト)。
テスト¶
-
.\gradlew.bat test: 成功(全スイート green)。新規4クラス計227テスト、failures=0。
関連 MR¶
- !128 (feature/455 → develop)
操作