[解決済み] python mock - メソッドの実装を妨げずにパッチを適用する
2023-05-16 07:01:02
質問
オブジェクトにパッチを適用して
assert_call*
ヘルパーを取得できるようにオブジェクトにパッチを適用するきれいな方法はありますか?
例えば、どのようにすれば
@patch
の行を修正すれば、次のようなテストが通るようになります。
from unittest import TestCase
from mock import patch
class Potato(object):
def foo(self, n):
return self.bar(n)
def bar(self, n):
return n + 2
class PotatoTest(TestCase):
@patch.object(Potato, 'foo')
def test_something(self, mock):
spud = Potato()
forty_two = spud.foo(n=40)
mock.assert_called_once_with(n=40)
self.assertEqual(forty_two, 42)
を使って、これをハックすることができるかもしれません。
side_effect
しかし、私は、関数、クラスメソッド、staticmethods、非結合メソッドなどのすべてで同じように動作する、より良い方法があるだろうと期待していました。
どのように解決するのですか?
あなたと同じような解決策ですが
wraps
:
def test_something(self):
spud = Potato()
with patch.object(Potato, 'foo', wraps=spud.foo) as mock:
forty_two = spud.foo(n=40)
mock.assert_called_once_with(n=40)
self.assertEqual(forty_two, 42)
によると のドキュメントによると :
ラップ : ラップするモックオブジェクトを指定する項目。wrapsがNoneでない場合 を呼び出すと、モックオブジェクトはラップされたオブジェクトに呼び出しを渡します。 (実際の結果を返します)。モックの属性にアクセスすると、ラップされたオブジェクトの対応する属性をラップしたモックオブジェクトが返されます。 の対応する属性をラップしたモックオブジェクトを返します。 の対応する属性をラップしたモックオブジェクトが返されます(したがって、存在しない属性にアクセスしようとすると AttributeErrorが発生します)。
class Potato(object):
def spam(self, n):
return self.foo(n=n)
def foo(self, n):
return self.bar(n)
def bar(self, n):
return n + 2
class PotatoTest(TestCase):
def test_something(self):
spud = Potato()
with patch.object(Potato, 'foo', wraps=spud.foo) as mock:
forty_two = spud.spam(n=40)
mock.assert_called_once_with(n=40)
self.assertEqual(forty_two, 42)
関連
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] Pythonで文字列を小文字にするには?
-
[解決済み] 改行やスペースを入れずに印刷する方法
-
[解決済み] Pythonでオブジェクトが属性を持つかどうかを知る方法
-
[解決済み] AndroidでPythonを実行する方法はありますか?
-
[解決済み] Pythonでパスから拡張子なしでファイル名を取得する方法は?
-
[解決済み] Pythonです。未束縛のメソッドを束縛する?
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。
-
[解決済み] 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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] pandasのDataFrameから空のセルを含む行を削除する
-
[解決済み] なぜ(0-6)は-6=偽なのか?重複
-
[解決済み] Pandasの'Freq'タグにはどのような値が有効ですか?
-
[解決済み] ファブリック経由でデプロイユーザとしてvirtualenvを有効化する
-
[解決済み] スペースがないテキストを単語のリストに分割する方法
-
[解決済み] pandasのタイムゾーンに対応したDateTimeIndexを、特定のタイムゾーンに対応したナイーブなタイムスタンプに変換する。
-
[解決済み] Flaskで非同期タスクを作る
-
[解決済み] Pandasのデータフレーム内の文字列を'date'データ型に変換するにはどうしたらいいですか?
-
[解決済み] 認証プラグイン 'caching_sha2_password' はサポートされていません。
-
[解決済み] Pythonでリストが空かどうかをチェックする方法は?重複