【もっく】
モック とは?
最終更新:
💡 テストで依存先を代役に替え、呼び出し方などを確かめる
テストで依存先の代わりに使い、呼び出し方などを確認するための代役。用語の分け方は資料やツールによって異なり、代役全体をモックと呼ぶ場合もある。返す値や例外を制御できても、本物の依存先との連携が正しいことまで保証するものではない。
📌 このページのポイント
なぜモックを使うの?
例えばメール送信先を代役へ差し替え、宛先と内容を渡して一度呼んだかを確認できる。本物の送信を避け、想定した結果や例外を返せるよ。ただし差し替えていない依存先まで自動で止まるわけではないんだ。
スタブとは違う?
テストダブルって何?
テストの代役全体の総称だよ。Fowlerが紹介する分け方では、ダミーは実際には使わない受け渡し用、フェイクは簡易な動く実装、スタブは用意した応答を返し、スパイはその呼び出し情報も記録する。スパイが必ず本物の処理を実行するという定義ではないんだ。
モックがあれば本物とのテストはいらない?
代役の想定と本物が違えば、代役のテストが通っても連携で失敗するよ。呼び出す側の処理を確認するテストと、実際の相手との受け渡しを確認するテストを組み合わせよう。代役の数だけでテストの良し悪しは決まらないんだ。
ライブラリが必要?
自分で代役を作ることもできるよ。Pythonには標準のunittest.mockがあり、Mockやpatchなどを使える。patchはテスト対象がその名前を参照する場所へ適用する必要がある。どこを差し替えたかを確認して使おう。
まとめ:ざっくりこれだけ覚えればOK!
「モック」って出てきたら「テストで依存先を代役に替え、呼び出し方などを確かめる」と思えばだいたいOK!
📖 おまけ:英語の意味
「Mock」 = 模倣するもの・代役
💬 テストでは本物の代わりに使うものを指すよ。モックという名前だけで、全ての振る舞いが本物と同じだと考えないようにしよう。