Возможно, я немного опоздал в игру, но это сработало для меня при вызове open
в другом модуле без необходимости создания нового файла.
test.py
import unittest
from mock import Mock, patch, mock_open
from MyObj import MyObj
class TestObj(unittest.TestCase):
open_ = mock_open()
with patch.object(__builtin__, "open", open_):
ref = MyObj()
ref.save("myfile.txt")
assert open_.call_args_list == [call("myfile.txt", "wb")]
MyObj.py
class MyObj(object):
def save(self, filename):
with open(filename, "wb") as f:
f.write("sample text")
. Исправляя функцию open
внутри модуля __builtin__
до моего mock_open()
, я могу издеваться над записью в файл без его создания.
Примечание. Если вы используете модуль, который использует cython, или ваша программа в любом случае зависит от cython, вам нужно будет импортировать модуль cython __builtin__
, включив import __builtin__
в вверху вашего файла. Вы не сможете издеваться над универсальным __builtin__
, если используете cython.