Python修补FTP导入
我正试图为我的ftp下载程序编写一个单元测试。由于某些原因,我的导入没有修补。我可以看到,在调试ftp对象时,它是一个真实的ftp对象,而不是模拟的ftp对象。我将Python3.5与pytest一起使用 这是我的密码:Python修补FTP导入,python,mocking,pytest,Python,Mocking,Pytest,我正试图为我的ftp下载程序编写一个单元测试。由于某些原因,我的导入没有修补。我可以看到,在调试ftp对象时,它是一个真实的ftp对象,而不是模拟的ftp对象。我将Python3.5与pytest一起使用 这是我的密码: from ftplib import FTP from unittest.mock import patch, MagicMock class FTPDownloader: def get_listing(self, host,user, password):
from ftplib import FTP
from unittest.mock import patch, MagicMock
class FTPDownloader:
def get_listing(self, host,user, password):
ftp = FTP()
ftp.connect(host)
ftp.login(user, password)
return ftp.nlst('/')
class TestMyAwesomeTest:
@patch('ftplib.FTP', autospec=True)
def test_get_listing(self, mock_ftp_constructor):
mock_ftp = mock_ftp_constructor.return_value
mock_ftp.nlst = MagicMock(return_value=['abc.csv'])
ftp_downloader = FTPDownloader()
listing = ftp_downloader.get_listing('ftp://foo.bar', 'user', 'password')
assert listing == ['abc.csv']
运行此命令时,我的错误是:
socket.gaierror: [Errno -2] Name or service not known
如何修复测试/修补程序以成功运行?
非常感谢你的帮助
-编辑-
我的文件位于:
tagging/tests/unit/test\u my\u awesome\u test.py
如果我将修补程序更改为:
@patch('tagging.tests.unit.test\u my\u awome\u test.FTP',autospec=True)
它仍然无法处理相同的错误问题在于您正在修补同一文件中的类。中提到的默认方法适用于与测试文件分离的源文件(通常情况)。如果源与测试位于同一文件中,则可以将patch.object
用于当前模块:
class TestMyAwesomeTest:
@对象(sys.modules[\uuuuuuuu name\uuuuuuuu],'FTP',autospec=True)
def test_get_清单(自模拟ftp):
mocked_ftp.return_value.nlst.return_value=['abc.csv']
ftp_downloader=FTPDownloader()
listing=ftp\u downloader.get\u listing('ftp://foo.bar“,”用户“,”密码“)
断言列表==['abc.csv']
如果使用ftlib import FTP中的,则必须修补该实例(请参阅)。或者,导入ftplib
并使用ftplib.FTP
。