【テスト】結合度の高いコードにオブジェクト結合部を作成してテストをしやすくする
目次
はじめに
テストを作成していると、結合度の高いコードがメソッド内に記述されていて想定しているテストをするのが困難な場合や、テストのときだけふるまいを変えたい場合が出てきます。
例
例えば、以下のコードのように、テストでは呼ばれてほしくないグローバルクラスのWriteメソッドがある
というコードがある場合、1
2
3
4
5
6public int Calculate(int value)
{
int result = latestValue + value;
Log.Write(); // このコードの処理はテストでは呼び出されたくない
return result;
}
そのコードをラップする関数をそのクラス内にprotected virtualなメソッド
として作成します。
1 |
|
この書き方に変更しても、実際の処理は変更されません。
テストを、書くときはテスト用の先ほど編集したクラスを継承したFakeクラスを作成して使用します。
先ほどのクラスには、virtual
メソッドがあるので実装を強制できます。
テストで使用する場合は、WriteLogクラス
の中身を変更することで、Calcrateクラス
の挙動を本番とは違う動作をさせることができるようになります。
1 |
|
【テスト】結合度の高いコードにオブジェクト結合部を作成してテストをしやすくする
https://daiki-iijima.github.io/2021/09/09/【テスト】結合度の高いコードにオブジェクト結合部を作成してテストをしやすくする/