テストは自分の責務境界に置き、不安定・他者責務の機構は決定的な代理点で検証する
テスト
設計判断
E2Eテスト
原則
テストの対象は自分の責務境界に絞る。最適化するのは「層ごとの責務を、決定的に観測できる点で検証すること」、避けるのは「外部・不安定・他者責務の機構(外部ページ、pointer drag、canvas 内部描画、実基盤の挙動)を直接たたいて flaky にし、既にテスト済みの内側ロジックを上位層で重複検証すること」。
判断基準
- 不安定で再現性の低い操作・描画は、それ自体を主対象にしない。決定的な代理経路に置き換える。ドラッグ並び替えは pointer drag でなくキーボード等の決定的操作経路で同じ処理を呼ぶ。canvas/SVG の内部描画文字列を直接取らず、周辺の安定した DOM(見出し・凡例・値・API 反映)で検証し、厳密な描画確認はビジュアルリグレッションへ分離する。
- 外部サービス境界を越えるフローは、外部ページそのものを追わない。自分の責務(正しい画面状態から正しい API を呼び、必要な body を送り、返った URL へ遷移を開始する)までを検証し、外部画面・決済・認証は外部システムや統合テストの責務に分ける。
- 層の責務でテストを分ける。内側(usecase / service)が十分テスト済みなら、上位(handler)はその層でしか壊れない境界(parse、デフォルト・上限、エラー→ステータス変換)だけを薄く検証し、業務ロジックを再検証しない。内部依存をモックして委譲・引数だけを見るテストは integration でなく unit に置き、実基盤の挙動・永続化・テナント分離が本質のケースだけを integration に残す。
- 外部 SDK 直結は、実通信に引きずられないよう、サービスが実際に使う最小メソッドだけの薄い adapter interface を内側に置いて単体テスト可能にする。SDK 全体のモックや汎用すぎる抽象は避ける。
検証
各テストについて「自分の責務境界を、決定的に観測できる点で見ているか」「外部・不安定な機構に依存して flaky になっていないか」「既にテスト済みの内側を重複検証していないか」を確認する。
根拠(synthesize 元)
- 517 ドラッグ並び替えの E2E は pointer 操作に固執せず決定的な操作経路で検証する
- 448 Canvas 描画コンポーネントの Storybook interaction test 方針(周辺の安定 DOM を検証する)
- 413 内部依存をモックするテストは integration ではなく unit に分離する
- 502 外部 SDK 直結サービスは薄い adapter interface で単体テスト可能にする