Я пишу модульные тесты для проверки моих функциональных возможностей проекта. Мне нужно заменить некоторые функции функцией mock, и я подумал использовать библиотеку Python mock. Реализация, которую я использовал, кажется, не работает должным образом, хотя я не понимаю, где я делаю неправильно. Вот упрощенный вариант:Python: проблема со встроенной функцией fock
корень/connector.py
from ftp_utils.py import *
def main():
config = yaml.safe_load("vendor_sftp.yaml")
downloaded_files = []
downloaded_files = get_files(config)
for f in downloaded_files:
#do something
корень/Utils/ftp_utils.py
import os
import sys
import pysftp
def get_files(config):
sftp = pysftp.Connection(config['host'], username=config['username'])
sftp.chdir(config['remote_dir'])
down_files = sftp.listdir()
if down_files is not None:
for f in down_files:
sftp.get(f, os.path.join(config['local_dir'], f), preserve_mtime=True)
return down_files
корень/тесты/connector_tester.py
import unittest
import mock
import ftp_utils
import connector
def get_mock_files():
return ['digital_spend.csv', 'tv_spend.csv']
class ConnectorTester(unittest.TestCase)
@mock.patch('ftp_utils.get_files', side_effect=get_mock_files)
def test_main_process(self, get_mock_files_function):
# I want to use a mock version of the get_files function
connector.main()
Когда я отлаживаю свой тест, я ожидаю, что функция get_files, вызванная внутри main.connect, является get_mock_files(), но вместо этого является ftp_utils.get_files(). Что я здесь делаю неправильно? Что я должен изменить в своем коде, чтобы правильно вызвать get_mock_file() mock?
Спасибо, Alessio
благодарит за отзыв. Я указал, что это упрощенная версия, извиниться, если я не уточню дальше. Зачем нам нужен другой модуль (content.py)?Это не очень прямолинейно и требует некоторой работы. Не могли бы вы указать, что было не так в моем примере? – AlessioG
Как я уже сказал, ваш пример не может работать, так как все импортные данные недействительны ... поэтому я не могу сказать вам, что не так ... В принципе, если у вас есть версия, где импорт правильный на вашем компьютере, вам нужно изменить '' 'ftp_utils.get_files''' на правильный путь к функции, когда она вызывается в '' connector.main() '', вероятно, что-то вроде '' connector.ftp_utils.get_files'' ... Но если ваша папка выглядит так, как вы дали в примере, вы ** действительно ** должны рассмотреть возможность реструктуризации! – Silmathoron
Хорошо, если вы не хотите использовать полный модуль, я редактировал примеры со всеми файлами в той же папке (тот факт, что вы использовали папку в примере, заставило меня подумать, что это было то, что у вас было на вашем компьютере) , Идея исправить код состоит в том, что если вы импортируете '' get_files'' в '' connector.py'', вам нужно исправить '' 'connector.get_files'''. – Silmathoron