Я использую python-mock , чтобы имитировать вызов открытия файла. Я хотел бы иметь возможность передавать фальшивые данные таким образом, чтобы я мог проверить, что вызывается read ()
, а также использовать тестовые данные, не затрагивая файловую систему при тестах.
Вот что у меня получилось:
file_mock = MagicMock(spec=file)
file_mock.read.return_value = 'test'
with patch('__builtin__.open', create=True) as mock_open:
mock_open.return_value = file_mock
with open('x') as f:
print f.read()
Результатом будет
вместе с 'test'
, как я предполагаю. Что я делаю не так, создавая этот макет?
Редактировать:
Выглядит так:
with open('x') as f:
f.read()
и это:
f = open('x')
f.read()
- разные объекты. Использование макета в качестве диспетчера контекста заставляет его возвращать новый Mock
, тогда как его вызов напрямую возвращает то, что я определил в mock_open.return_value
. Есть идеи?