Макет файл, открытый в Python
Я пытаюсь открыть файл, и все примеры показывают, что мне нужно
@patch('open', create=True)
но я продолжаю получать
Need a valid target to patch. You supplied: 'open'
Я знаю, патч нужен полный пунктирный путьopen
, но я понятия не имею, что это такое. На самом деле, я даже не уверен, что это проблема.
2 ответа
Решение
Вам необходимо указать имя модуля; если вы тестируете в скрипте, имя модуля __main__
:
@patch('__main__.open')
в противном случае используйте имя модуля, который содержит код, который вы тестируете:
@patch('module_under_test.open')
так что любой код, который использует open()
встроенный найдет пропатченный глобальный вместо этого.
Обратите внимание, что mock
Модуль поставляется с mock_open()
утилита, которая позволит вам построить подходящий open()
вызов с данными файла:
@patch('__main__.open', mock_open(read_data='foo\nbar\nbaz\n'))
В Python 3 вы должны использовать:
@mock.patch("builtins.open", create=True)