Получение фактического возвращаемого значения для фиктивного файла .read ()

Я использую 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 . Есть идеи?

6
задан Brian Hicks 5 January 2012 в 19:24
поделиться