1. ホーム
  2. python

[解決済み] Mockを使用して関数/メソッドが呼び出されていないことを確認する

2022-04-25 21:50:39

質問

Mockライブラリを使用してアプリケーションをテストしていますが、ある関数が呼び出されなかったことを保証したいのです。モックのドキュメントでは、次のようなメソッドについて説明しています。 mock.assert_called_withmock.assert_called_once_with のようなものは見つかりませんでしたが mock.assert_not_called またはベリファイモックに関連するものは 呼ばれない .

クールでもパイソン的でもなさそうですが、以下のような感じで行けそうです。

def test_something:
    # some actions
    with patch('something') as my_var:
        try:
            # args are not important. func should never be called in this test
            my_var.assert_called_with(some, args)
        except AssertionError:
            pass  # this error being raised means it's ok
    # other stuff

これを実現するためのアイデアがあれば教えてください。

どのように解決するのですか?

あなたの場合、これでうまくいくはずです。

assert not my_var.called, 'method should not have been called'

サンプルです。

>>> mock=Mock()
>>> mock.a()
<Mock name='mock.a()' id='4349129872'>
>>> assert not mock.b.called, 'b was called and should not have been'
>>> assert not mock.a.called, 'a was called and should not have been'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError: a was called and should not have been