#python #mocking
Вопрос:
Я пишу простую функцию для записи диктанта на диск с помощью некоторого преобразования и yaml. Самый простой способ проверить, что происходит, — это захватить выходные Path(file_name).write_text(text_to_write)
данные . Но мне трудно понять, что именно мне нужно сделать, чтобы захватить этот контент.
def test_path_write():
with mock.patch('Path.write_text', return_value=None):
function_that_uses_path_write_text()
assert 'Content I would like to be in the file' in SOME_KIND_OF_CAPTURE
Есть идеи, как я могу получить что-то в SOME_KIND_OF_CAPTURE, что я могу использовать для тестирования?
Ответ №1:
Вы ищете что-то вроде следующего?
with patch.object(Path, 'write_text') as patch_path:
data_to_write = 'Something'
patch_path.return_value = data_to_write
path = Path('some/path')
res = path.write_text(data_to_write)
print(res)
Комментарии:
1. Я думаю, что мне бы хотелось использовать что — то вроде StringIO для записи того, что было на самом деле написано, — чтобы это было не возвращаемое значение, а значение, которое, как думал Path, он записывал.
Ответ №2:
Используя pytest, вот что я сделал:
def test_writer(mocker):
mocker.patch.object(Path, "write_text")
[...]
written_content = Path.write_text.call_args_list[0][0][0]