【发布时间】:2020-03-11 00:49:14
【问题描述】:
我在测试使用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.
如何在没有得到 PicklingError 的情况下测试 os.getcwd 是否被调用?
【问题讨论】:
标签: python pickle python-unittest python-unittest.mock