[解決済み] Python Mockを使った関数のモッキング
質問
私は
Mock
を使って、(外部のコンテンツを返す)関数を作ろうとしています。
モックモジュール
.
モジュールにインポートされた関数をモックするのに苦労しています。
例えば
util.py
には
def get_content():
return "stuff"
モックを作りたい
util.get_content
をモックして、他のものを返すようにしたい。
私はこれを試しています。
util.get_content=Mock(return_value="mocked stuff")
もし
get_content
が別のモジュールの中で呼び出された場合、実際にはモックされたオブジェクトを返すことはないようです。を使用する方法について、私は何かを見逃しているのでしょうか?
Mock
?
なお、以下のように呼び出すと、正常に動作します。
>>> util.get_content=Mock(return_value="mocked stuff")
>>> util.get_content()
"mocked stuff"
しかし、もし
get_content
が他のモジュール内部から呼び出された場合、モック化されたバージョンではなく、オリジナルの関数を呼び出します。
>>> from mymodule import MyObj
>>> util.get_content=Mock(return_value="mocked stuff")
>>> m=MyObj()
>>> m.func()
"stuff"
の内容は
mymodule.py
from util import get_content
class MyObj:
def func():
get_content()
そこで質問なのですが、呼び出したモジュールの内部からモック版の関数を呼び出すにはどうしたらよいのでしょうか?
どうやら
from module import function
がモック関数を指していないことが原因である可能性があります。
どのように解決するのですか?
一般的なケースを解決する方法はまだ明確ではありませんが、私は回避策を持っていると思います。
で
mymodule
に置き換えた場合
from util import get_content
class MyObj:
def func():
get_content()
で
import util
class MyObj:
def func():
util.get_content()
は
Mock
が呼び出されるようです。名前空間が一致する必要があるようです (これは理にかなっています)。しかし、奇妙なことに、私が期待するのは
import mymodule
mymodule.get_content = mock.Mock(return_value="mocked stuff")
を使えば、from/import 構文を使っている元のケースでトリックを行うことができます(現在では、この構文で
get_content
を
mymodule
). しかし、これはまだモックされていない
get_content
.
名前空間が重要であることがわかりました - ただ、コードを書くときにそれを心に留めておく必要があります。
関連
-
[解決済み] 関数内でグローバル変数を使用する
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み] Mockitoでvoidメソッドをモックする方法
-
[解決済み] フェイク、モッキング、スタビングの違いとは?
-
[解決済み】forループを使った辞書の反復処理
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] Pythonによる一対のクロスプロダクト [重複] (英語)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] googletransがエラー 'NoneType' オブジェクトに 'group' 属性がない、と言って動かなくなった。
-
[解決済み] タプルのリストを複数のリストに変換するには?
-
[解決済み] Django Rest Framework ファイルアップロード
-
[解決済み] 古いバージョンのPythonにおける辞書のキーの並び順
-
[解決済み] pandasのタイムゾーンに対応したDateTimeIndexを、特定のタイムゾーンに対応したナイーブなタイムスタンプに変換する。
-
[解決済み] djangoフレームワークでフォームフィールドから値を取得するには?
-
[解決済み] pycharmがタブをスペースに自動変換する
-
[解決済み] Django filter queryset __in for *every* item in list
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?
-
[解決済み] Alembicアップグレードスクリプトでインサートやアップデートを実行するにはどうすればよいですか?