Ошибка ссылки: почтовик не определен

Возможно, я немного опоздал в игру, но это сработало для меня при вызове 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.

0
задан Prateek Dhuper 22 February 2015 в 16:02
поделиться