Как замокать функцию open с помощью unittest.mock_open?
def parse_log_file(file_name: str) -> dict:
driver_time = {}
try:
with open(file_name, 'r', encoding='utf8') as file:
for line in file:
if len(line) > 1:
line = line.strip()
driver_id = line[0:3]
time = line[3:]
driver_time.update({driver_id: time})
except IOError:
print('path file is not found')
sys.exit(1)
return driver_time
При этом желательно в самом тесте открыть файл для записи, сделать саму запись и в функцию передать уже путь к этому файлу. Я сделал это так, но вот с помощью декоратора @patch не могу разобраться
def test_parse_log_file(self):
with open('file.log', 'w') as f:
f.write('SVF2018-05-24_12:02:58.917')
result = parse_log_file('file.log')
self.assertEqual({'SVF': '2018-05-24_12:02:58.917'}, result)
os.remove('file.log')
может кому то понадобится, не знаю все ли верно, но тест проходит, сделал так, уже без открытия и записи в сам файл, т.к. подменил сам результат open():
@patch("builtins.open", mock.mock_open(read_data='SVF2018-05-24_12:02:58.917'))
def test_parse_log_file(self):
result = parse_log_file(file_name='any way')
self.assertEqual({'SVF': '2018-05-24_12:02:58.917'}, result)