-1

我正在尝试让我的单元测试正常工作,尤其是这个ftp.nlst

def get_file_list(ftp_conn):

    filematch = '*.csv'

    ftp_list = ftp_conn.nlst(filematch)

    return ftp_list

有人可以帮助下面的单元测试吗?谢谢。

from unittest.mock import patch, MagicMock

class TestExample(unittest.TestCase):

    def setUp(self):
        self.ftp = ftplib.FTP()
        self.ftp.nlst = MagicMock(return_value=[])

    
    def test_example(self):
?????
4

1 回答 1

0

您已经模拟了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%
于 2021-03-17T03:28:42.773 回答