unity-playmode-test
Installation
SKILL.md
Unity Playmode Test (UI 操作)
PREREQUISITE:
unity-shared(Relay Server 経由で Unity Editor 起動中、-i <instance>必須)
u uitree click で外形操作する unity-ui とは目的が違う。本スキルは NUnit [UnityTest] クラスを書いて回帰テストとして main に commit する 部分を扱う。CI / u tests run play で再実行できる形に落とし込むことが目的。
ワークフロー
- テスト対象の決定 — どの MonoBehaviour / どのシーン / どの element / 何が成功条件か。
Pre-flight A (シーン側): 指定シーンに target MonoBehaviour が wire されているか
u -i <project> uitree dumpで確認 (空シーン / Prefab だけのシーンに対してテストを書いて SetUp でFindAnyObjectByTypeが null を返す事故を防ぐ)。 Pre-flight B (production の到達範囲側): 観測したい element が production の screen-extract 後の_root配下にあるか を確認する。ScreenConfigRuntime.ExtractScreenのような切り出しを通すと、UXML 上は存在しても_root.Q(...)で null を返す要素がある (sibling frame / 状態別 frame / Off-screen 等)。*_ScreenConfig.asset(ScriptableObject) のdefaultElementName/parentElementNameを直接読んで、production が「Empty / Loading 等」をどう extract しているかを把握する- 観測対象が extract 範囲外の場合、テストの前に production 側の wiring を直す か、本スキル末尾「Contract test として残す」パターンを使う
- 要素名の命名規則確認 —
_root.Q<T>("name")の name は UXML 上の生name属性 (例:"Favorite Empty"、空白あり)。一方 Source Generator が生成するUI.Xプロパティ名は PascalCase 化された identifier (UI.FavoriteEmpty)。Q に渡す文字列を間違えないように、UXML の name を正として写す (UI.Xの名前から推測しない)。詳細は採用先docs/unity/figma-naming-conventions.md参照。 - asmdef 配置 —
assets/asmdef.template.jsonをTests/PlayMode/に置く - テストクラス作成 —
assets/PlaymodeTest.template.csを雛形にして書く - コンパイル確認 —
u -i <project> refresh→u -i <project> stateでisCompiling=False - 実行 —
u -i <project> tests run play -a <Assembly> - fail したら
references/troubleshooting.mdを読む