web-dev-qa-db-ja.com

モックとモンキーパッチの違いは何ですか?

私はpythonで作業していて、テストに少し慣れていません。外部の依存関係を次のようなローカルメソッドに置き換えるテストをよく目にします。

import some_module

def get_file_data():
  return "here is the pretend file data"

some_module.get_file_data = get_file_data

# proceed to test

question のように、これは「モンキーパッチ」と呼ばれています。また、「モック」という言葉が「マネーパッチ」と一緒に、または非常によく似たシナリオでよく使用されているのもわかります。

2つのコンセプトに違いはありますか?

15
Jad S

モンキーパッチ 実行時に関数/メソッド/クラスを別のものに置き換えて、パープのテスト、バグの修正、またはその他の動作の変更を行います。

nittest.mockライブラリ は、モンキーパッチを使用して、テスト対象のソフトウェアの一部をモックオブジェクトに置き換えます。次のような巧妙な単体テストを作成するための機能を提供します。

  • モックオブジェクトがどのように呼び出されているかを記録するので、assertを使用してコードの呼び出し動作をテストできます。
  • 実際のモンキーパッチ用の便利なデコレータpatch()
  • モックオブジェクトを作成して特定の値を返すことができます(return_value)、特定の例外を発生させます(side_effect)。
  • 「魔法の方法」のモック(例:__ str__)。

たとえば、モックを使用してクライアントのネットワークI/O(urllib、requests)を置き換えることができるため、単体テストは外部サーバーに依存せずに機能します。

11
René Pijl