Python 2.7 在pytest中模拟FTP连接
我正在尝试为一个函数编写单元测试,该函数将FTP会话作为输入参数,并附带一些其他参数。以下是函数:Python 2.7 在pytest中模拟FTP连接,python-2.7,mocking,pytest,Python 2.7,Mocking,Pytest,我正在尝试为一个函数编写单元测试,该函数将FTP会话作为输入参数,并附带一些其他参数。以下是函数: def get_listing_photos_ftp(session, source_system_id, mls_system, mls_num, photo_type, max_photos, skip_first=False, photo_file_name=None): """Get Photo from FTP ses
def get_listing_photos_ftp(session, source_system_id, mls_system, mls_num, photo_type, max_photos, skip_first=False,
photo_file_name=None):
"""Get Photo from FTP
session_type = 'FTP' (TREB_DLA)
Refer to info on FTP photo file names here: http://trebdata.trebnet.com/photos.htm
"""
del source_system_id, mls_system, photo_type, skip_first
photos = []
for photo_num in range(1, max_photos):
filename = photo_file_name(photo_num, mls_num)
try:
"""Gets a file (StringIO binary file contents object) from the FTP server. Will raise error if
file not found.
"""
photo = session.get_file(filename)
except socket.error as e:
raise Exception("FTP server socket error. Error details: " + str(e))
# Append photo tuple (filename.extension, photo content) - photo may be None if listing has less than 21
if photo is not None:
photos.append(photo_tuple(photo_num, photo.getvalue()))
return photos
我尝试模拟所有可以返回指定值进行测试的函数调用。有人能给我一个更好的计划来解决这种模拟测试吗
def test_get_listing_photos_ftp():
filename = Mock(return_value='\mlsphotos\2\478\N4054478_2.jpg')
session = Mock(return_value='<common.ftp.FTP object at 0x112092150>')
#throws an error as I am calling 'session' is a string
session.get_file = Mock(return_value='00100001 01010000 10101011 10001011 11010111 11001101')
getvalue = Mock(return_value='asdsadadsdadasd')
assert photos_helper.get_listing_photos_ftp('session', 'N4067078', 'treb', 'N4067078', 'jpg', 4, False, filename) == []
def test_get_list_photos_ftp():
filename=Mock(返回值='\mlsphotos\2\478\N4054478_2.jpg')
会话=模拟(返回值=“”)
#当我调用的“会话”是字符串时引发错误
session.get_file=Mock(返回_值='00100001 01010000 10101011 10001011 11010111 11001101')
getvalue=Mock(返回_value='asdsadasd')
断言照片\u助手。获取\u列表\u照片\u ftp('session','N4067078','treb','N4067078','jpg',4,False,filename)=[]
此处模拟FTP会话的一个示例如下:
def test_get_listing():
content = 'First line.\n'
output = StringIO.StringIO()
output.write(content)
session = Mock()
session.get_file = Mock(return_value=output)
def photo_file_name(x, y):
return "123.jpg"
result = get_listing_photos_ftp(session, None, None, 2, None, 3, photo_file_name=photo_file_name)
assert result == [(1, content), (2, content)]
看看Mock()对象,以及它如何具有我们希望session.get_file()方法调用生成的返回值。以类似的方式,您可以测试其他场景,如返回值为None等