問題タブ [python-mock]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
28503 参照

python - Pythonでのモックパッチのfrom/importステートメント

次のサンプルコードでmock.patchを機能させようとしています。

これにより、次のように出力されます。

これは、defaultdictにパッチが適用されていないことを意味します。

from / importステートメントをストレートインポートステートメントに置き換えると、次のように機能します。

出力は次のとおりです。

from / importを使用して呼び出しにパッチを適用する方法はありますか?

ありがとうございました

0 投票する
1 に答える
130 参照

python - インポートされたモジュールを使用した python テスト

私は一般的にモックとテストを使用することにかなり慣れていません。これは、インポートされたモジュール全体をモックする最初の試みです。たとえば、私は

その後、コードでredisをチェックします

CI サーバーに redis をインストールする必要がないように、モック オブジェクトまたはクラスを redis 名前空間に設定するにはどうすればよいですか?

0 投票する
2 に答える
1637 参照

python - Python でモックを使用してテストするにはどうすればよいですか?

テストしたい Python コードにモックを挿入する 2 つの異なるアプローチを見ることができます。

  1. 依存性注入:

    連携するクラスがテスト対象オブジェクトのコンストラクターに渡されるようにし、モック オブジェクト (および必要に応じて Java などのファクトリ) を渡します。

  2. モンキーパッチ:

    モック オブジェクト ファクトリを使用して、テスト対象のモジュール内の共同作業クラスをスタブ化します (共同作業クラスを構築すると、実際にモック オブジェクトが作成されます)。コンストラクターを介してそれらを注入したり、ファクトリーを作成したりする必要はありません。

これらのアプローチはどちらも、python モッキング ライブラリ ( moxmockなど) でサポートされているようです。Pythonでどのアプローチを使用する必要がありますか、これらのいずれかが賢明ですか、それともより良いアプローチがありますか?

0 投票する
2 に答える
37806 参照

python - モックされたメソッドを元の状態にリセットする方法はありますか? - Python モック - モック 1.0b1

私はモックしている次の単純化されたクラスを持っています:

私の最初のテストでは、メソッド A のみをモックします

2 番目のテストでは、check メソッド全体をモックします。

内部で呼び出しcheck()てモックする代わりに、2 番目のテストから完全にモックされたを呼び出すため、最初のテストからの私のアサーションは失敗します。A()check()check()

テスト後にメソッドをクリアして「通常」に設定する方法はありますか? すでに試しmyClass.check.reset_mock()ましたが、何もしないようです。テストの順序を移動しても何も起こりません。

http://pypi.python.org/pypi/mock/からPython用のモック1.0b1を使用しています

0 投票する
3 に答える
13386 参照

python - nosetestsを使用してPythonカバレッジレポートからモックパッケージを除外する方法

私は現在、モックライブラリを使用してPythonでいくつかの基本的なノーズユニットテストを作成しようとしています。

いくつかの基本的な例を終えた後、私は今使用しようとしました、nosetests --with-coverageそして今私はモックパッケージを持っています、そして私が「モックアウェイ」しようとしたパッケージはカバレッジレポートに示されています。これらを除外する可能性はありますか?

テストしたいクラスは次のとおりです。

そしてテストケース:モックインポートパッチから

次の出力が得られますnosetests --with-coverage

これらのパッケージを除くすべてのパッケージを手動でホワイトリストに登録せずに、モックパッケージとimaplibパッケージを除外する方法はありますか?--cover-package=PACKAGE

Ned Batchelderのおかげで、.coveragercファイルについて知ることができました。ありがとうございます。

次の内容の.coveragercファイルを作成しました。

これで、カバレッジレポートのモックの出力は次のようになります。

モックパッケージはカバーされなくなりましたが、レポートには表示されます。

これが助けになる場合は、Coverage.pyバージョン3.5.2を使用します。

0 投票する
7 に答える
130959 参照

python - Mockを使用して関数/メソッドが呼び出されなかったことをアサートします

Mockライブラリを使用してアプリケーションをテストしていますが、一部の関数が呼び出されなかったことを表明したいと思います。mock.assert_called_withモックドキュメントはとのようなメソッドについて話しますが、モックが呼び出されなかったことを確認するためのようなものや関連するものmock.assert_called_once_withは見つかりませんでした。mock.assert_not_called

私は次のようなもので行くことができますが、それはクールでもパイソンでもないようです:

これを達成する方法はありますか?

0 投票する
2 に答える
2353 参照

python - 存在しないモジュールの階層をモックするにはどうすればよいですか?

本番段階にのみ存在するモジュールのシステムがあると仮定しましょう。テストの時点では、これらのモジュールは存在しません。それでも、それらのモジュールを使用するコードのテストを書きたいと思っています。また、これらのモジュールから必要なすべてのオブジェクトをモックする方法を知っていると仮定しましょう。問題は、モジュール スタブを現在の階層に簡単に追加するにはどうすればよいかということです。

ここに小さな例があります。テストしたい機能は、次のファイルに配置されていますactual.py

私のテスト スイートには、すでに必要なものがすべて揃っていthing1_mockますthing2_mock。また、私はテスト機能を持っています。level1.level2...必要なのは、現在のモジュール システムに追加することです。このような:

sys.modules['level1']別のオブジェクトを含むオブジェクトなどで置き換えることができることを知っています。しかし、それは私にとっては多くのコードのようです。もっとシンプルできれいな解決策があるに違いないと思います。私はそれを見つけることができません。

0 投票する
4 に答える
6335 参照

python - 1 つのモジュールに対してのみ Mock で関数にパッチを適用しますか?

Python 関数をテストするにはos.listdir、他の関数にパッチを適用する必要があります。osしかし、パッチが適用されると、importステートメントは失敗します。この関数にパッチを当てて、tests.py を正常に動作させたままにすることはできますか?

壊れる例を次に示しますimport

real_functionパッチが適用されたos.pathと、通常の機能を確認するためのテストが必要です。

ここにトレースバックがあります

0 投票する
1 に答える
515 参照

python - インスタンスではなく特定の型で呼び出されたモックをアサートする方法は?

私はモックとpython 2.7.3の最新バージョンを使用しています

私は最初のフラスコアプリを構築しており、いくつかの基本的なミドルウェアをテストして、flask.abort() が発生するかどうかを確認しています (発生した場合は、Unauthorized 例外でメソッドが呼び出されたと主張します)。

ここに私の生産コードがあります

私が抱えている問題は、発生した 401 がアサーション自体で期待しているものと同じではないため、モックがアサートに失敗することです。

実際のインスタンスではなく、タイプのみを気にする場合、どうすればアサーションを書き直すことができますか?

0 投票する
2 に答える
10294 参照

python - Django ORM - 値 ().filter() チェーンのモック

Djangosmodel.Manager()クラスの連鎖呼び出しをモックしようとしています。values()今のところ、 andfilter()メソッドをモックしたいと思います。

小さなテスト プロジェクトを作成したことをテストするには、次のようにします。

  1. 仮想環境を作成する
  2. 走るpip install django mock mock-django nose django-nose
  3. プロジェクトを作成するdjango-admin.py startproject mocktest
  4. アプリを作成するmanage.py startapp mockme
  5. django_noseと(settings.py)mocktest.mockmeに追加INSTALLED_APPS
  6. TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'settings.pyに追加

すべてが正しくセットアップされていることを確認するために、実行しましたmanage.py test。1 つのテストが実行されます。これは、アプリを作成するときに Django が作成する標準テストです。

次にやったのは、非常に単純なモデルを作成することでした。

mockme/models.py

次に行ったのは、 を使用する単純な関数を作成することでしたMyModel。それは後でテストしたい機能です。

mockme/functions.py

ここでは特別なことは何も起きていません。この関数は MyModel オブジェクトをフィルタリングして、name='Frank'. values() への呼び出しValuesQuerySetは、見つかったすべての MyModel インスタンスの name フィールドのみを含む を返します。

mockme/tests.py

最初の assertEquals は成功と評価されます。モデル Manager はまだモックされていないため、インスタンスは返されません。2 番目の assertEquals が呼び出されるとresult、QuerySetMock への戻り値として追加した MyModel インスタンスが含まれることが期待されます。

よくわかりませんが、メソッドが最後に評価された呼び出しになることがわかったのでfilter()、メソッドではなくメソッドをモックしました。values()

2 番目の結果変数には MyModel インスタンスが含まれないため、テストは失敗します。

メソッドが本当にモックされていることを確認するためにfilter()、「debug print」ステートメントを追加しました。

返された:

私は何を間違っていますか?