макет файла, открытого в Python

python unit-testing mocking magicmock

12692 просмотра

2 ответа

122 Репутация автора

Я пытаюсь открыть файл, и все примеры показывают, что мне нужно

@patch('open', create=True) 

но я продолжаю получать

Need a valid target to patch. You supplied: 'open'

Я знаю, что патчу нужен полный пунктирный путьopen , но я понятия не имею, что это такое. На самом деле, я даже не уверен, что это проблема.

Автор: TzurEl Источник Размещён: 19.07.2016 09:16

Ответы (2)


15 плюса

770998 Репутация автора

Решение

Вам необходимо указать имя модуля; если вы тестируете в скрипте, то имя модуля __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'))
Автор: Martijn Pieters Размещён: 19.07.2016 09:24

10 плюса

731 Репутация автора

В Python 3 вы должны использовать:

@mock.patch("builtins.open", create=True)
Автор: wierzbiks Размещён: 21.06.2017 01:33
Вопросы из категории :
32x32