問題タブ [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.
python - Pythonでのモックパッチのfrom/importステートメント
次のサンプルコードでmock.patchを機能させようとしています。
これにより、次のように出力されます。
これは、defaultdictにパッチが適用されていないことを意味します。
from / importステートメントをストレートインポートステートメントに置き換えると、次のように機能します。
出力は次のとおりです。
from / importを使用して呼び出しにパッチを適用する方法はありますか?
ありがとうございました
python - インポートされたモジュールを使用した python テスト
私は一般的にモックとテストを使用することにかなり慣れていません。これは、インポートされたモジュール全体をモックする最初の試みです。たとえば、私は
その後、コードでredisをチェックします
CI サーバーに redis をインストールする必要がないように、モック オブジェクトまたはクラスを redis 名前空間に設定するにはどうすればよいですか?
python - Python でモックを使用してテストするにはどうすればよいですか?
テストしたい Python コードにモックを挿入する 2 つの異なるアプローチを見ることができます。
依存性注入:
連携するクラスがテスト対象オブジェクトのコンストラクターに渡されるようにし、モック オブジェクト (および必要に応じて Java などのファクトリ) を渡します。
モンキーパッチ:
モック オブジェクト ファクトリを使用して、テスト対象のモジュール内の共同作業クラスをスタブ化します (共同作業クラスを構築すると、実際にモック オブジェクトが作成されます)。コンストラクターを介してそれらを注入したり、ファクトリーを作成したりする必要はありません。
これらのアプローチはどちらも、python モッキング ライブラリ ( moxやmockなど) でサポートされているようです。Pythonでどのアプローチを使用する必要がありますか、これらのいずれかが賢明ですか、それともより良いアプローチがありますか?
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を使用しています
python - nosetestsを使用してPythonカバレッジレポートからモックパッケージを除外する方法
私は現在、モックライブラリを使用してPythonでいくつかの基本的なノーズユニットテストを作成しようとしています。
いくつかの基本的な例を終えた後、私は今使用しようとしました、nosetests --with-coverage
そして今私はモックパッケージを持っています、そして私が「モックアウェイ」しようとしたパッケージはカバレッジレポートに示されています。これらを除外する可能性はありますか?
テストしたいクラスは次のとおりです。
そしてテストケース:モックインポートパッチから
次の出力が得られますnosetests --with-coverage
これらのパッケージを除くすべてのパッケージを手動でホワイトリストに登録せずに、モックパッケージとimaplibパッケージを除外する方法はありますか?--cover-package=PACKAGE
Ned Batchelderのおかげで、.coveragercファイルについて知ることができました。ありがとうございます。
次の内容の.coveragercファイルを作成しました。
これで、カバレッジレポートのモックの出力は次のようになります。
モックパッケージはカバーされなくなりましたが、レポートには表示されます。
これが助けになる場合は、Coverage.pyバージョン3.5.2を使用します。
python - Mockを使用して関数/メソッドが呼び出されなかったことをアサートします
Mockライブラリを使用してアプリケーションをテストしていますが、一部の関数が呼び出されなかったことを表明したいと思います。mock.assert_called_with
モックドキュメントはとのようなメソッドについて話しますが、モックが呼び出されなかったことを確認するためのようなものや関連するものmock.assert_called_once_with
は見つかりませんでした。mock.assert_not_called
私は次のようなもので行くことができますが、それはクールでもパイソンでもないようです:
これを達成する方法はありますか?
python - 存在しないモジュールの階層をモックするにはどうすればよいですか?
本番段階にのみ存在するモジュールのシステムがあると仮定しましょう。テストの時点では、これらのモジュールは存在しません。それでも、それらのモジュールを使用するコードのテストを書きたいと思っています。また、これらのモジュールから必要なすべてのオブジェクトをモックする方法を知っていると仮定しましょう。問題は、モジュール スタブを現在の階層に簡単に追加するにはどうすればよいかということです。
ここに小さな例があります。テストしたい機能は、次のファイルに配置されていますactual.py
。
私のテスト スイートには、すでに必要なものがすべて揃っていthing1_mock
ますthing2_mock
。また、私はテスト機能を持っています。level1.level2...
必要なのは、現在のモジュール システムに追加することです。このような:
sys.modules['level1']
別のオブジェクトを含むオブジェクトなどで置き換えることができることを知っています。しかし、それは私にとっては多くのコードのようです。もっとシンプルできれいな解決策があるに違いないと思います。私はそれを見つけることができません。
python - 1 つのモジュールに対してのみ Mock で関数にパッチを適用しますか?
Python 関数をテストするにはos.listdir
、他の関数にパッチを適用する必要があります。os
しかし、パッチが適用されると、import
ステートメントは失敗します。この関数にパッチを当てて、tests.py を正常に動作させたままにすることはできますか?
壊れる例を次に示しますimport
。
real_function
パッチが適用されたos.path
と、通常の機能を確認するためのテストが必要です。
python - インスタンスではなく特定の型で呼び出されたモックをアサートする方法は?
私はモックとpython 2.7.3の最新バージョンを使用しています
私は最初のフラスコアプリを構築しており、いくつかの基本的なミドルウェアをテストして、flask.abort() が発生するかどうかを確認しています (発生した場合は、Unauthorized 例外でメソッドが呼び出されたと主張します)。
ここに私の生産コードがあります
私が抱えている問題は、発生した 401 がアサーション自体で期待しているものと同じではないため、モックがアサートに失敗することです。
実際のインスタンスではなく、タイプのみを気にする場合、どうすればアサーションを書き直すことができますか?
python - Django ORM - 値 ().filter() チェーンのモック
Djangosmodel.Manager()
クラスの連鎖呼び出しをモックしようとしています。values()
今のところ、 andfilter()
メソッドをモックしたいと思います。
小さなテスト プロジェクトを作成したことをテストするには、次のようにします。
- 仮想環境を作成する
- 走る
pip install django mock mock-django nose django-nose
- プロジェクトを作成する
django-admin.py startproject mocktest
- アプリを作成する
manage.py startapp mockme
django_nose
と(settings.py)mocktest.mockme
に追加INSTALLED_APPS
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」ステートメントを追加しました。
返された:
私は何を間違っていますか?