バニラ機能で.assert_called_once_with
機能を実行することはできません。まず、mock.create_autospec
デコレータでラップする必要があります。だから、例えば:
エレガント
import unittest.mock as mock
def rm(filename):
helper(filename, 5)
def helper(filename):
pass
helper = mock.create_autospec(helper)
def test_unix_fs(mocker):
mocker.patch('module.helper')
rm('file')
helper.assert_called_once_with('file', 5)
以上:
import unittest.mock as mock
def rm(filename):
helper(filename, 5)
@mock.create_autospec
def helper(filename):
pass
def test_unix_fs(mocker):
mocker.patch('module.helper')
rm('file')
helper.assert_called_once_with('file', 5)
アサーションが失敗することに注意してください、あなただけ'file'
でそれを呼び出すことから。だから、有効なテストは次のようになります。
import unittest.mock as mock
def rm(filename):
helper(filename, 5)
@mock.create_autospec
def helper(filename):
pass
def test_unix_fs(mocker):
mocker.patch('module.helper')
rm('file')
helper.assert_called_once_with('file')
EDIT:関数は、いくつかのモジュールで定義されている場合は、ローカルにデコレータでそれをラップすることができます。たとえば:オブジェクト指向場合
import unittest.mock as mock
from some_module import some_function
some_function = mock.create_autospec(some_function)
def test_unix_fs(mocker):
some_function('file')
some_function.assert_called_once_with('file')
は、私はそれをクリック&覚えることができるように、SOお気に入りの答えと星があればいいのに。 – Axalix
問題は、他のモジュールで 'helper'関数が定義されていることです。アプリケーションコードに '@ mock.create_autospec'のようなテスト項目を追加するのは良い考えではないと思います。 –
@ Overflow012:そうする必要はありません。モジュールから関数を取得し、デコレータをローカルに追加することができます。 –