Use the Front Door First(「正面玄関」を最初に使う)
1. 原則
クラスやモジュールの公開API(Public API)を通じてテストする
- 「正面玄関」とは、外部からアクセス可能なインターフェース(公開API)のこと
- privateな実装の詳細に依存せず、外部から見た振る舞いを検証する
2. 根拠
実装への依存を減らす
- テストコードと実装コードの結合度を低く保つ
- 実装が変更されても、公開APIが変わらなければテストコードを修正する必要がない
- テストの頑健性と保守性を向上させる
3. 指針
振る舞いの検証に注力
- テスト対象オブジェクトの振る舞いを、外部から観察できる結果で検証する
- 例えば、メソッドの戻り値や、オブジェクトの状態変化を確認する
- privateメソッドや内部状態を直接テストしない
4. 注意事項
必要に応じた例外対応
- 複雑な内部状態を持つクラスでは、一部のprivateメソッドをテストする必要がある場合がある
- この場合、テストのためだけにprivateメソッドの可視性を変更しない
- テストしやすい設計(Testable Design)を心がけることが、根本的な解決策となる