您已经模拟了ftp.nlst()方法及其返回值,您只需将self.ftp对象传递给get_file_list()函数。最后,断言返回值是否符合预期。
例如
main.py:
def get_file_list(ftp_conn):
filematch = '*.csv'
ftp_list = ftp_conn.nlst(filematch)
return ftp_list
test_main.py:
import unittest
from unittest.mock import patch, MagicMock
import ftplib
from main import get_file_list
class TestExample(unittest.TestCase):
def setUp(self):
self.ftp = ftplib.FTP()
self.ftp.nlst = MagicMock(return_value=[1, 2, 3])
def test_get_file_list(self):
actual = get_file_list(self.ftp)
self.assertEqual(actual, [1, 2, 3])
if __name__ == '__main__':
unittest.main()
单元测试结果:
⚡ coverage run /Users/dulin/workspace/github.com/mrdulin/python-codelab/src/stackoverflow/66458222/test_main.py && coverage report -m --include='./src/**'
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
Name Stmts Miss Cover Missing
-----------------------------------------------------------------------
src/stackoverflow/66458222/main.py 4 0 100%
src/stackoverflow/66458222/test_main.py 13 0 100%
-----------------------------------------------------------------------
TOTAL 17 0 100%