我在测试一个方法是否被调用时遇到了麻烦mock
——举个简单的例子,假设该方法是os.getcwd
. 我想测试我自己的函数 ,是否按预期pickle_wdir
调用。os.getcwd
但是,我正在测试的函数腌制由返回的值os.getcwd
,这会导致错误。
这是一个重现错误的简单示例。
os_ex.py
:
import os
import pickle
def pickle_wdir(filename):
dir = os.getcwd()
with open(filename, 'wb') as handle:
pickle.dump(dir, handle)
test_os_ex.py
:
from unittest import TestCase
from unittest.mock import patch
from os_ex import pickle_wdir
class TestPickleWdir(TestCase):
def test_os_called(self):
fname = 'dir.pickle'
with patch('os_ex.os') as mocked_obj:
pickle_wdir(fname)
mocked_obj.getcwd.assert_called()
返回的错误信息是
_pickle.PicklingError: Can't pickle <class 'unittest.mock.MagicMock'>: it's not the same object as unittest.mock.MagicMock
.
我如何在os.getcwd
没有得到这个的情况下测试那个被调用的PicklingError
?