Как замокать функцию 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)

Ответы (0 шт):