Макет файл, открытый в 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)
Другие вопросы по тегам