1. ホーム
  2. unit-testing

[解決済み] いつモックすればいい?

2022-04-22 18:13:37

質問

モックとフェイクオブジェクトについての基本的な理解はありますが、いつ、どこでモックを使うべきか、特に次のようなシナリオに適用する場合の感覚がよくわかりません。 ここで .

解決方法は?

ユニットテストは、1つのメソッドを通して1つのコードパスをテストする必要があります。 あるメソッドの実行がそのメソッドの外側を通り、別のオブジェクトに移り、そしてまた戻ってくるとき、依存関係が発生します。

そのコードパスを実際の依存関係でテストする場合、それはユニットテストではなく、統合テストです。 それは良いことですし、必要なことですが、ユニットテストではありません。

依存関係にバグがある場合、テストは誤検出を返すような影響を受けるかもしれません。 例えば、あなたは依存関係に予期しないnullを渡すかもしれませんし、依存関係はそれが行うように文書化されているようにnullで投げないかもしれません。 その場合、テストは null 引数の例外に遭遇せず、合格となります。

また、テスト中に依存オブジェクトが正確に望むものを返すようにすることが、不可能ではないにしても、難しいことに気づくかもしれません。 これには、テスト中に期待通りの例外をスローすることも含まれます。

その依存関係を置き換えるのがモックです。 依存オブジェクトを呼び出す際に期待値を設定し、 望むテストを行うために依存オブジェクトが返すべき正確な値を設定し、 そして例外処理コードをテストできるようにどのような例外をスローするかを設定します。 このようにして、問題のユニットを簡単にテストすることができます。

TL;DR: あなたのユニットテストが触れるすべての依存関係をモックにする。