テストケース設計:引数を属性に分解する
#テスト
テストケースを「引数と戻り値の組み合わせ」で考えると、抜け漏れが発生しやすい。
各引数を「結果に影響する属性」に分解してから設計する。
code:typescript
export class EmployeeId {
REGEX = /^EMP\d+$/;
constructor(public readonly id: string) {
if (!this.REGEX.test(id)) {
throw new Error("Invalid Employee ID format");
}
}
}
❌ 悪い考え方
引数 id: string と結果(成功/失敗)の組み合わせをいきなり列挙
何をテストすべきか不明確で抜け漏れが発生する
✅ 良い考え方
仕様 /^EMP\d+$/ を構成要素に分解
table:_
要素 同値クラス
^ EMPで始まる / 始まらない
EMP 完全一致 / 小文字 / 別文字
\d+ 1桁以上 / 0桁
レイアウト EMP+数字 / EMP+文字+数字 / 数字+EMP
$ 数字で終わる / 終わらない
テストケース例
正常系
EMP0(1桁)
EMP1234567890(多桁)
異常系
前に空白: EMP123
小文字:emp123, Emp123
別文字:ABC123
数字なし:EMP
順序違い:123EMP
間に文字:EMP-123
後ろに文字:EMP123
その他の例
password:長さ、大小文字、数字、記号の4属性
ポイント
仕様を要素分解してから具体的なテストケースを導出することで、体系的で抜け漏れの少ないテストが設計できる。