---
paths: ["tests/**", "**/test_*.py"]
---

# テスト方針 (Testing Policy)

テストを作成・実行するときは本方針に従うこと．

## 基本方針 (Basic Policy)

- テストフレームワークは **pytest**．実行は `uv run pytest`
- テスト対象の中心は `core/`（診断ロジック）．**GUI の自動テストは書かない**（画面は人間が動作確認する．CLAUDE.md「手動確認が必要な作業」参照）
- 旧実装との**結果同一性**が本プロジェクトの成功基準（PLAN_01）のため，回帰テストを最重視する

## テストの種類 (Test Types)

| 種類 | 対象 | 方針 |
| --- | --- | --- |
| 単体テスト | `core/` の各関数 | 数式（Lab 変換等）は手計算・既知値で検証する |
| 回帰テスト | 診断パイプライン全体 | 旧実装 exe で得た入出力ペア（RGB → 5 色スコア）を固定データとして照合する |
| 異常系テスト | CSV 読込・入力ガード | 不正形式・欠損ファイルでの例外を検証する |

## 規則 (Rules)

- テストファイルは `tests/` 配下に `test_<モジュール名>.py`（配置は project-structure.md 参照）
- テスト用の固定データ（サンプル CSV・期待値）は `tests/fixtures/` に置く
- SVM のような学習を伴うテストも**乱数シードに依存させない**（現行 SVM は決定的．非決定的な挙動が見つかった場合は仕様として記録する）
- モックは外部境界（ファイルダイアログ等）のみに使う．`core/` 内部はモックせず実物で検証する
- テストが遅くなったら（30 秒超），SVM 学習系のテストに `slow` マーカーを付けて分離する
