Isolate the SUT(SUTを隔離する)
1. 原則
SUTは外部システムに依存してはならない
- テスト対象システム(SUT: System Under Test)を、その依存コンポーネントから隔離してテストする
- SUTが依存する外部システム(データベース、ファイルシステム、ネットワークサービスなど)を直接使用しない
- SUT単体でテストが実行できるように、テスト環境を構築する
2. 根拠
信頼性と実行速度の向上
- 外部依存があると、テストが不安定になる
- 依存先のシステムが利用できない、応答が遅い、データが変動するなど、不確実な要素がテストに影響する
- 依存コンポーネントを排除することで、テストの実行が高速になり、フィードバックサイクルを短縮できる
3. 指針
テストダブルの活用
- SUTが依存するオブジェクトを、テストダブル(Test Double)で置き換える
- テストダブルには以下の種類がある
- ダミーオブジェクト: 引数として渡されるが、実際には使用されないオブジェクト
- フェイクオブジェクト: 実際のオブジェクトと似た動作をするが、簡略化された実装を持つオブジェクト
- スタブ: 呼び出しに対して、事前に設定された値を返すオブジェクト
- スパイ: 呼び出しの記録を保持し、後で検証できるようにするオブジェクト
- モック: 振る舞いの検証に特化したオブジェクト
4. 注意事項
実装との乖離
- テストダブルの使用は、テスト対象の振る舞いを模倣するものであり、実際の動作とは異なる場合がある
- テスト対象とテストダブルが密結合すると、テストが脆弱になる
- 実際に近い環境での統合テストも組み合わせ、実装との乖離を最小限に抑える