- 単体テストを「少量のコード(1単位のふるまい)」を「短い実行時間」で「(他のテストケースから)隔離された状態で実行される」ものと定義する
- 8章の先取りになるが、統合テストは上記の定義に あてはまらないテスト ということになる
- デトロイト学派は古典主義で、本番コードと同じように依存クラスなどを準備する
- 共有依存関係であるDBなどはモック化する
- ロンドン学派はモック主義で、依存クラスはすべてモック化する
- Enumやconstは不変のためモック化しない
- pp44-45の図が参考になる
- テストケース同士を隔離すること
- 1つのふるまいを隔離する
- テストケースの干渉を防ぐためにプロセス外依存(DBなど)をモック化する
- 依存先クラスなどはモック化しないでプロダクションコードをつかう
- プロセス外依存を モック化しない テストはIT(Integration Test、統合テスト、結合テスト)などより上位のテストで行う
- ロンドン学派からみると統合テストのようにみえる
- バイブルは『テスト駆動開発』 12
- 大きなまとまりとしての動作は検証しやすい
- 依存関係の解決が大変
- 依存クラスの依存クラスの依存クラスの……依存クラスを用意しなければならない
- その場合はそもそもの構造が問題であることもある
- 依存クラスの依存クラスの依存クラスの……依存クラスを用意しなければならない
- 上述した単体テストの定義から外れるテスト
- 2つ以上のふるまいを同時にテストする場合
- 時間がかかるテストの場合
- 1クラス1テストなので問題個所の発見が簡単になる
- 1テスト≠1テストケース
- 依存関係の解決が(比較的)簡単
- 全部モック化するので
- テストコード量が増える
- プロダクションコードとの結びつきが強い
- モック化するので、振る舞いの再現のためにコードの詳細を知る必要がある
- プロダクションコードの依存先が変わるとテストコードも修正しなければならない
- テストコードの書き方によってはデトロイト学派でも同じな気もする
- プロダクションコードの依存先が変わるとテストコードも修正しなければならない
- モック化するので、振る舞いの再現のためにコードの詳細を知る必要がある
- モック化することで保守性が下がる
- プロダクションコードに変更があってもモックは変更されないので、既存コードのテストは通ってしまう
- テストコードの更新忘れがあっても気づくのが遅れたりする
- テストコード→プロダクションコードの順に修正すればそれで解決する?
- プロダクションコードに変更があってもモックは変更されないので、既存コードのテストは通ってしまう
- 依存先クラスをモック化せずにするテスト
著者的にはデトロイト推し?デトロイト学派スタイルの利点が詳細に書いてあるのに対して、ロンドン学派スタイルは問題点や課題のほうが詳細に書いてある印象を受ける。