Minimize Untestable Code(テスト不可能なコードを最小限にする)
1. 原則
テストが難しい、あるいは不可能なコードを書いてはならない
- テストコードを書くことが困難・不可能なコードは論外
- すべてのコードがテスト可能であることを目指す
- テストしやすい設計(=テスト容易性)を意識してプログラミングを行う
2. 根拠
品質保証の向上
- テスト不可能なコードは、その振る舞いを自動的に検証できない
- 品質が保証されていない領域が増える
- テストカバレッジの向上は、バグの早期発見につながる
3. 指針
テスト可能な設計の採用
- グローバル変数やシングルトンパターンなど、状態を共有する設計を避ける
- 依存性の注入(DI: Dependency Injection)を活用し、外部コンポーネントを簡単に置き換えられるようにする
- 複雑なロジックを小さな関数やクラスに分割する
4. 注意事項
現実的な妥協点
- すべてのコードを100%テスト可能にすることは、現実的ではない場合がある
- UIや外部システムの変更に大きく依存する部分は、単体テストが困難なことがある
- そのような場合、単体テストではなく、統合テストや受け入れテストで品質を担保する