unit-test-designlisted
Install: claude install-skill Saigetsu233/harness-jp-si
# 単体テスト設計支援スキル
## 1. 入力
- 対象:関数シグネチャ · クラス定義 · API 定義 · 受入基準
- 言語:Java / Python / TypeScript(Next.js / Vue / Node.js) 等
- 既存テストフレームワーク:JUnit 5 / pytest / Vitest / Jest 等
## 2. 手順
### Step 1:仕様の再確認
1. 関数 · API の **入出力契約** を整理する(型 · 範囲 · 必須 / 任意)。
2. 受入基準(AC)· 詳細設計から **期待する振る舞い** を抽出。
3. 例外 · エラーパスの **すべて** を列挙(仕様上の異常系 + 実装上の防御)。
### Step 2:観点別ケース生成
#### 観点 A:正常系
- 代表的な合格入力 1 〜 3 ケース。
- 必須項目すべて入力 · 任意項目欠落 · 任意項目入り の組合せ。
#### 観点 B:異常系
- 必須項目欠落
- 形式不正(型 · パターン · 範囲外)
- 認可不足(該当する場合)
- 業務的不整合(在庫切れ · 重複登録等)
- 外部依存失敗(DB · API · タイムアウト)
#### 観点 C:境界値
- 数値:0 / 1 / -1 / max / min / overflow
- 文字列:空 / 1 文字 / 最大長 / 最大長+1 / Unicode(絵文字含む)
- コレクション:空 / 1 要素 / 大量
- 日付:閏日 / 月末 / タイムゾーン跨ぎ / 過去 · 未来極端
#### 観点 D:セキュリティ
- SQL Injection(文字列入力に `'OR 1=1`)
- XSS(`<script>`)
- Path Traversal(`../../../etc/passwd`)
- 認可バイパス(他ユーザの ID で操作)
- ログ · エラーメッセージへの PII 漏れ
### Step 3:テストケース表
```markdown
| TC-ID | 観点 | 概要 | 入力 | 期待出力 | 優先度 |
| --- | --- | --- | --- | --- | --- |
| UT-001 | 正常 | 必須のみで登録 | { email, password } | 200 + user object | High |
| UT-002 | 異常 | email 形式不正 | { email: "invalid", ... } | 400 + VALIDATION_ERROR | High |
| UT-003 | 境界 | password 最小長 | password 8 文字 | 200 | Medium |
| UT-004 | 境界 | password 最小長未満 | password 7 文字 | 400 | High |
| UT-005 | セキュリティ | SQL Injection 入力 | email: "' OR 1=1--" | 400 (パラメタ化済み) | High |
```
### Step 4:テストコード雛形
```typescript
// Vitest 例
import { describe, it, expect } from 'vitest'
import { registerUser } from '@/services/user-service'
descri