Fast (迅速)
1. 原則
テストは迅速に完了しなければならない
- ユニットテストは高速に実行できなければならない
- ユニットテストの数が増えた(成長した)時でもそれなりの実行時間でテストが実行できなければならない
- 実行に時間がかかるテストは極力排除する必要がある
2. 根拠
時間がかかるテストはやがて実行されなくなる
- 完了に時間がかかるテストは、テストを実行することに躊躇いが生じる
- 時間がかかるテストはいずれテスト実行を省略されるようになる
- そうなってしまうと、ユニットテストのメリットが無くなってしまう
3. 指針
遅いコードへの依存を減らす
- テスト対象のコードは、時間の掛かる処理(=DB/ファイル/ネットワークアクセスが発生する処理)をモックに差し替え可能なように設計する
- StrategyパターンやDIパターンを適用し、モックの適用が簡単にできるようにしておく
- DB/ファイル/ネットワークアクセスが発生するコードは適切な実行環境を構築する必要があり、テスト環境の構築/初期化にも時間がかかってしまう
時間がかかるテストは結合試験で行う
- DB/ファイル/ネットワークアクセスなど入出力全体の妥当性の検証はサブシステム同士を結合させた状態で行われるべきである
- したがって、DB/ファイル/ネットワークアクセスなど出力全体の検証は結合試験にて実施する
4. 注意事項
5. 関連
参考資料
- 実践JUnit(Jeff Langr, Andy Hunt, Dave Thomas)