ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ
- Это решение не использует Mocker, но может использоваться с pytest.
- Это решение работает для Python> = 3.6
Поскольку вы сказали, что используете Mocker, я предполагаю, что вы работаете над очень старой базой кода (<= 2.6). Я настоятельно рекомендую вам перенести код на любую версию> = 3.6
Поскольку Python 3.3 mock интегрирован в стандартную библиотеку lib в unittest.mock и является в значительной степени клоном из старого пакета mock
В mock lib есть функция под названием mock_open , которая делает именно то, что вам нужно, и пример с именно тем, что вы хотите.
with patch('__main__.open', mock_open(read_data='bibble')) as m:
with open('foo') as h:
result = h.read()
m.assert_called_once_with('foo')
assert result == 'bibble'
Адаптируя решение под свои нужды, вы можете использовать этот пример
import yaml
from unittest.mock import patch, mock_open
def load_yaml_file(filename):
with open(filename, 'rt') as f:
data = yaml.load(f)
return data
with patch('__main__.open', mock_open(read_data='{"hello":"world"}')) as m:
res = load_yaml_file('foo')
assert res == {"hello":"world"}