Я новичок в Python. Я пытаюсь написать UT с помощью MagicMock следующим образом:
db_obj = MagicMock(DBFactory.get_db_for_env)
db_obj.fetch_cursor_records.return_value = self.get_success_csv()
db_obj.fetch_cursor_records.assert_called_once_with()
upload_to_s3.assert_called_once_with(json.dumps(self.get_success_csv()))
@staticmethod
def get_success_csv():
return [{"test_col1": "test_val1", "test_col2" : "test_val2"}]
Здесь я сталкиваюсь с ошибкой следующим образом:
AttributeError: Mock object has no attribute 'fetch_cursor_records'
Даже когда я издеваюсь над fetch_cursor_records следующим образом:
self.extractor.db_obj.fetch_cursor_records =
MagicMock(DBFactory.get_db_for_env.fetch_cursor_records)
Я все еще сталкиваюсь с проблемой следующим образом:
AttributeError: 'function' object has no attribute 'fetch_cursor_records'
РЕДАКТИРОВАТЬ :
Я мог решить вышеуказанную проблему с ответом, который я отправил , Но, похоже, работает с Python 3.7. Но согласно требованию, я должен был проверить то же самое с python 3.6. Тогда это начало терпеть неудачу.
Хотя я создал mock с помощью @patch(DBFactory.get_db_for_env)
, но функция get_db_for_env () класса DBFactory фактически вызывается при выполнении модульного теста с python 3.6. Я понятия не имею, как это исправить.