[解決済み] Pythonはreturn_valueの代わりにMagicMockオブジェクトを返します。
2022-08-07 12:15:45
質問
私は python ファイル
a.py
というファイルがあり、そこには二つのクラス
A
と
B
.
class A(object):
def method_a(self):
return "Class A method a"
class B(object):
def method_b(self):
a = A()
print a.method_a()
ユニテストしたい
method_b
のクラスで
B
をモック化することで
A
. 以下は、ファイルの内容です。
testa.py
をこの目的のために使用します。
import unittest
import mock
import a
class TestB(unittest.TestCase):
@mock.patch('a.A')
def test_method_b(self, mock_a):
mock_a.method_a.return_value = 'Mocked A'
b = a.B()
b.method_b()
if __name__ == '__main__':
unittest.main()
私が期待するのは
Mocked A
を出力することを期待します。しかし、私が得たものは
<MagicMock name='A().method_a()' id='4326621392'>
どこが悪いんだろう?
どうすればよいのでしょうか?
あなたが
@mock.patch('a.A')
とすると、クラス
A
を、テスト中のコードで
mock_a
.
で
B.method_b
を設定すると
a = A()
となり、これが
a = mock_a()
- すなわち
a
は
return_value
の
mock_a
. この値を指定していないため、通常の
MagicMock
になります。これも設定されていませんので、デフォルトの応答 (さらに別の
MagicMock
) が返されます。
代わりに
は
return_value
の
mock_a
のどちらかとして、適切なメソッドを持つようにします。
mock_a().method_a.return_value = 'Mocked A'
# ^ note parentheses
または、おそらくもっと明示的に
mock_a.return_value.method_a.return_value = 'Mocked A'
あなたのコードは、次のような場合に動作したことでしょう。
a = A
(インスタンスの生成ではなくクラスの代入) の場合、次のようになります。
a.method_a()
を実行するとモックメソッドが起動します。
関連
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで辞書に新しいキーを追加するにはどうすればよいですか?
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み] Pythonでオブジェクトが属性を持つかどうかを知る方法
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] matplotlib でプロットの軸、目盛、ラベルの色を変更する方法
-
[解決済み] Pandasを使って、既存のExcelファイルに新しいシートを保存する方法は?
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。
最新
-
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のデータフレームでタプルの列を分割するにはどうしたらいいですか?
-
[解決済み] 2つの線分が交差しているかどうかを確認するにはどうすればよいですか?
-
[解決済み] Jupyterノートブックでenv変数を設定する方法
-
[解決済み] 辞書のキーと値を交換するにはどうすればよいですか?
-
[解決済み] タプルのリストを複数のリストに変換するには?
-
[解決済み] データフレームをソートした後にインデックスを更新する
-
[解決済み] python-requests モジュールからのすべてのリクエストをログに記録します。
-
[解決済み] スペースがないテキストを単語のリストに分割する方法
-
[解決済み] オブジェクトのリストに特定の属性値を持つオブジェクトが含まれているかどうかをチェックする
-
[解決済み] pipの依存性/必要条件をリストアップする方法はありますか?