依存関係を排除する手法
パラメータの適合
低レベルのAPI呼び出しと絡まり合っている状況に、抽象レイヤーを差し込むことで接合部を作り、テストしやすくする。
例を書く
メソッドオブジェクトの取り出し
長いメソッドを新しいクラスにする
例を書く
グローバル参照のカプセル化
グローバル要素をカプセル化して分断する。
いくつかのグローバル要素が、常に近くで使用されたり、変更されたりしている場合、それらは同じクラスに含めることができる。
今後変更しやすくするための最初のステップ。グローバル変数をクラスに移動したことで、分離が実現でき、徐々にコードを改善する準備ができる。
例を書く
静的メソッドの公開
あるメソッドがインスタンス変数やインスタンスメソッドを使用してなければ、staticにしてインスタンス化せずにテストを実行できる
呼び出しの抽出とオーバーライド
とても便利なリファクタリング
テスト用サブクラスで依存部分をオーバーライドしてテスト可能にする
例を書く
Factory Methodの抽出とオーバーライド
初期化処理をコンストラクタ内に直接書いてしまうと、テスト時にその処理を回避するのが非常に難しくなる場合もある
初期化処理のFactory Methodを用意して、テスト時はオーバーライド可能にする
getメソッドの抽出とオーバーライド
getメソッドで取得する値が他への依存を持つ場合に、テスト時はオーバーライドする
実装の抽出
ネーミングは設計の中心
インターフェースの抽出
安全に依存関係を排除できる手法
自動リファクタリングツールがあればそれを使う
インスタンス委譲の導入
この手法を使用すると、オブジェクト接合部が得られる
静的setメソッドの導入
変更可能なグローバル変数は危ない
シングルトンパターン
アクセス制限を緩和して、より強力なテストを得る
シングルトンを無くすのは大事なリファクタリング
コンストラクタのパラメータ化
コンストラクタの中で作っているものをパラメータ化することで、テスト時に置き換えられる。
メソッドのパラメータ化
コンストラクタのパラメータ化とほぼ同じ
パラメータのプリミティブ化
一時的な処置
コードをむしろ貧弱にしてしまうから
メソッドと変数の引き上げ