第9章 このクラスをテストハーネスに入れることができません
- 一般的な4つの問題
- クラスのオブジェクトを簡単に生成できない
- そのクラスを含むテストハーネスを簡単にビルドできない
- 使用しなければならないコンストラクタが悪い副作用を持つ
- かなりの量の処理をコンストラクタで行われ、その内容を検出する必要がある
苛立たしいパラメーターに対する解決方法
- Nullを渡す
- あるオブジェクトが生成しづらいパラメーターを必要としたら、単なるNullを渡す
- そのパラメーターが使われた場合、例外で補足できる
- その場合、必要なオブジェクトを生成する
- インターフェース抽出
- 小さな擬装クラスから作る
- 内容は単なるNullを返すだけだったりする
隠れた依存関係
テスト内部で使われているコンストラクタの中で別のものに依存しているのが隠れている
- コンストラクタのパラメーター化
- コンストラクタに、依存しているオブジェクトを引数として渡す
- 依存関係を表面化できるが、呼び出し元を全て変更する必要がある
複雑な生成
多くのオブジェクトを内部で生成している場合、コンストラクタのパラメーター化によって、パラメーターのリストが大きくなる可能性がある
安全にメソッドを抽出できるリファクタリングツールがあるなら、Factory Methodの抽出とオーバーライドができるが、すべての言語で機能しない
インスタンスの入れ替え
setterを使う
苛立たしいグローバルな依存関係
- Singletonデザインパターン
- アプリケーションの中で一つ以上のインスタンスを作られないようにする
恐るべきインクルードの依存関係
不要なインクルードのせいで、最終的に何万行ものコードになってしまう
そして、非常に複雑な依存関係を持つ
解消するには、一つづつ追加して行き、必要なものだけを残す
玉ねぎパラメーター
オブジェクト生成が階層的になっている
解決方法
- パラメーターが不要ならNullを渡す
- 直接依存しているものには、インターフェースの抽出を使う
- または実装の抽出を使う
別名のパラメーター
よくわからないので省略
聞きたい