Написал тест для функции с вложенными функциями. Но при запуске тестов появляется ошибка.
Файл tests.py
@patch('google_drive.uploader.check_file_exist')
@patch('google_drive.uploader.get_id_object_by_name')
@patch('google_drive.uploader.update_file')
@patch('google_drive.uploader.create_file')
def test_load_file_to_disk(self, mock_check_file, mock_get_id,
mock_update_file, mock_create_file):
mock_response_check = MagicMock()
response_dict_check = True
mock_response_check.json.return_value = response_dict_check
mock_check_file.return_value = mock_response_check
mock_response_get = MagicMock()
response_dict_get = '18Wwvuye8dOjCZfJzGf45yQvB87Lazbzu'
mock_response_get.json.return_value = response_dict_get
mock_get_id.return_value = mock_response_check
mock_response_update = MagicMock()
response_dict_update = {'kind': 'drive#file',
'id': '18Wwvuye8dOjCZfJzGf45yQvB87Lazbzu',
'name': 'main_log_i-analytic6.pz.cp.log',
'mimeType': 'text/plain'
}
mock_response_update.json.return_value = response_dict_update
mock_update_file.return_value = mock_response_check
mock_response_create = MagicMock()
response_dict_create = {'id': '18Wwvuye8dOjCZfJzGf45yQvB87Lazbzu'}
mock_response_create.json.return_value = response_dict_create
mock_create_file.return_value = mock_response_check
result = load_file_to_disk('file_path', 'name', 'folder_id')
print(mock_check_file.call_args_list) # Отладочный вывод
print(mock_get_id.call_args_list)
print(mock_update_file.call_args_list)
print(mock_create_file.call_args_list)
mock_check_file.assert_called_with('name', 'parent_folder_id')
mock_get_id.assert_called_with('name', 'folder_id')
mock_update_file.assert_called_with('file_path', 'file_id')
mock_create_file.assert_not_called()
self.assertEqual(result, None)
if __name__ == "__main__":
unittest.main()
Ошибка:
python -m unittest
DEBUG:google_drive.uploader:Запуск автозагрузчика...
DEBUG:google_drive.uploader:Получен id файла main_log_i-analytic6.pz.cp.log в папке с id '1DvWKXFKjddttDIWrqyKo6DqTgpv6rfFH'.
17OaoGOZkIUhRP658nXMHYshSDg6KByzX
{'kind': 'drive#file', 'id': '17OaoGOZkIUhRP658nXMHYshSDg6KByzX', 'name': 'main_log_i-analytic6.pz.cp.log', 'mimeType': 'text/plain'}
INFO:google_drive.uploader:Создана папка 20_12_2024.
.DEBUG:google_drive.uploader:Получен id файла exist_file в папке с id 'test_folder'.
.DEBUG:google_drive.uploader:id файла nonexistent-file в папке test_folder не найден. Проверьте наличие файла в папке с id test_folder '.
.DEBUG:google_drive.uploader:Файл name обновлен в папке 'folder_id'.
[]
[call('file_path', <MagicMock name='create_file()' id='2765363568928'>)]
[call('name', 'folder_id')]
[call('name', 'folder_id')]
F
======================================================================
FAIL: test_load_file_to_disk (tests.TestUploader.test_load_file_to_disk)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\DOrlov\AppData\Local\Programs\Python\Python313\Lib\unittest\mock.py", line 1424, in patched
return func(*newargs, **newkeywargs)
File "C:\Users\DOrlov\Рабочая папка\Projects\admin-tools\tests.py", line 102, in test_load_file_to_disk
mock_check_file.assert_called_with('name', 'parent_folder_id')
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\DOrlov\AppData\Local\Programs\Python\Python313\Lib\unittest\mock.py", line 968, in assert_called_with
raise AssertionError(error_message)
AssertionError: expected call not found.
Expected: create_file('name', 'parent_folder_id')
Actual: not called.
----------------------------------------------------------------------
Ran 4 tests in 0.020s
FAILED (failures=1)
Предполагаю, что ошибка связана с
mock_check_file.assert_called_with('name', 'parent_folder_id')
mock_get_id.assert_called_with('name', 'folder_id')
mock_update_file.assert_called_with('file_path', 'file_id')
mock_create_file.assert_not_called('name', 'folder_id', 'file_path')
Так как, закомментировав этот участок кода, тесты проходят, но по принтам можно сказать, что есть какие-то проблемы:
[]
[call('file_path', <MagicMock name='create_file()' id='2799013179952'>)]
[call('name', 'folder_id')]
[call('name', 'folder_id')]
F
======================================================================
FAIL: test_load_file_to_disk (tests.TestUploader.test_load_file_to_disk)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\Users\DOrlov\AppData\Local\Programs\Python\Python313\Lib\unittest\mock.py", line 1424, in patched
return func(*newargs, **newkeywargs)
File "C:\Users\DOrlov\Рабочая папка\Projects\admin-tools\tests.py", line 102, in test_load_file_to_disk
mock_check_file.assert_called_with(name='name', parent_folder='parent_folder_id')
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\Users\DOrlov\AppData\Local\Programs\Python\Python313\Lib\unittest\mock.py", line 968, in assert_called_with
raise AssertionError(error_message)
AssertionError: expected call not found.
Expected: create_file(name='name', parent_folder='parent_folder_id')
Actual: not called.
----------------------------------------------------------------------
Ran 1 test in 0.005s
FAILED (failures=1)
Прилагаю также функции, которые тестирую:
https://gist.github.com/daniil-orlovv/8498486382ba...