[解決済み] Python のユニットテストでメソッドが呼び出されたことを表明する
2022-09-27 14:01:28
質問
Pythonのユニットテストに以下のようなコードがあるとします。
aw = aps.Request("nv1")
aw2 = aps.Request("nv2", aw)
特定のメソッド(私の場合は
aw.Clear()
) がテストの2行目の間に呼び出されたことを保証する簡単な方法はありますか? 例えば、このようなものがありますでしょうか。
#pseudocode:
assertMethodIsCalled(aw.Clear, lambda: aps.Request("nv2", aw))
どのように解決するのですか?
私は モック (これは現在 unittest.mock になりました)。
from mock import patch
from PyQt4 import Qt
@patch.object(Qt.QMessageBox, 'aboutQt')
def testShowAboutQt(self, mock):
self.win.actionAboutQt.trigger()
self.assertTrue(mock.called)
あなたの場合、次のようになります。
import mock
from mock import patch
def testClearWasCalled(self):
aw = aps.Request("nv1")
with patch.object(aw, 'Clear') as mock:
aw2 = aps.Request("nv2", aw)
mock.assert_called_with(42) # or mock.assert_called_once_with(42)
Mockは、オブジェクトやモジュールにパッチを当てる方法や、正しいものが呼び出されたかどうかをチェックする方法など、非常に多くの便利な機能をサポートしています。
注意! (買い手はご用心!)
タイプミスをした場合
assert_called_with
(になります。
assert_called_once
または
assert_called_wiht
を使用しない限り、モックはこれをモックされた関数とみなして喜んで実行するので、テストはまだ実行されるかもしれません。
autospec=true
. より詳しい情報は
assert_called_once: 脅威か威嚇か
.
関連
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] なぜC++はPythonよりもstdinからの行の読み込みが遅いのですか?
-
[解決済み] 複数行の長い文字列を作成するためのPythonicな方法
-
[解決済み] 最近のPythonでカスタム例外を宣言する適切な方法?
-
[解決済み] リスト内包とラムダ+フィルタの比較
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] コーラブルとは何ですか?
-
[解決済み] Pythonのキャッシュライブラリはありますか?
-
[解決済み] PILからopenCVフォーマットへの変換
-
[解決済み] Django のテストデータベースをメモリ上だけで動作させるには?
-
[解決済み] django.db.migrations.exceptions.InconsistentMigrationHistory
-
[解決済み] Pandasの'Freq'タグにはどのような値が有効ですか?
-
[解決済み] subprocess.run()の出力を抑制またはキャプチャするには?
-
[解決済み] if 節の終了方法
-
[解決済み] Django filter queryset __in for *every* item in list
-
[解決済み] Alembicアップグレードスクリプトでインサートやアップデートを実行するにはどうすればよいですか?