Я использую 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()
Вывод этого - <mock.Mock object at 0x8f4aaec>
intead 'test'
, как я предположил бы.Что я делаю не так при создании этого макета?
Редактировать:
Выглядит так:
with open('x') as f:
f.read()
и это:
f = open('x')
f.read()
являютсяразные предметы.Использование mock в качестве менеджера контекста заставляет его возвращать новый Mock
, тогда как вызов его напрямую возвращает все, что я определил в mock_open.return_value
.Есть идеи?