Задать вопрос
@d_orlovv

Как решить ошибку AssertionError: expected call not found при запуске тестов библиотеки python unittest?

Написал тест для функции с вложенными функциями. Но при запуске тестов появляется ошибка.

Файл 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...
  • Вопрос задан
  • 40 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы