Я пытаюсь выполнить тестирование тестового класса SFTP-помощника, который вызывает некоторые вызовы модуля pysftp. Я хочу высмеять фактические сетевые вызовы от pysftp, поэтому никаких побочных эффектов нет, и просто убедитесь, что класс правильно вызывает базовые методы SFTP с правильными параметрами.Откусывающий класс python в модульном тесте и проверка экземпляра
Вот простой пример моего кода до сих пор:
import pysftp
import unittest
import mock
class SFTPHelper(object):
def __init__(self, host, username, password, files_dir):
self.host = host
self.username = username
self.password = password
self.files_dir = files_dir
def list_files(self):
with pysftp.Connection(
self.host,
username=self.username,
password=self.password) as sftp:
return sftp.listdir(self.files_dir)
class TestSFTPHelper(unittest.TestCase):
@mock.patch('pysftp.Connection')
def test_list_files(self, mock_connection):
sftp_helper = SFTPHelper('somehost', 'someuser', 'somepassword', '/some/files/dir')
sftp_helper.list_files()
# this assertion passes
mock_connection.assert_called_with(
'somehost', password='somepassword', username='someuser')
# this assertion does not pass
mock_connection.listdir.assert_called_with('/some/files/dir')
Ошибка утверждение:
AssertionError: Expected call: listdir('/some/files/dir')
Not called
Я предполагаю, что это не работает, потому что мне нужно, чтобы утверждать, что функция была вызвана на экземпляре, но как мне получить экземпляры pysftp.Connection, которые были использованы в моем методе?
1. Можете ли вы дать более четкое описание проблемы, чем * "не работает" *? 2. Вы пытаетесь высмеять диспетчер * *, вы должны это прочитать. – jonrsharpe
@jonrsharpe обновлено с ошибкой утверждения –
@ dnit13 просто опечатка в вопросе stackoverflow, я делаю это в фактическом коде. исправлено –