在下面的问题中,使用ftplib的函数是在同一文件中定义的,这使得修补('ftplib.FTP'(
嘲笑ftplib。用于对 Python 代码进行单元测试 FTP
我的问题是:如果在我的测试中,我想创建一个在某处使用 ftplib 的类的实例(我们称之为"A"((即:类 A 有一个类 B 的实例,B 有一个调用 connect((的 FTP 对象(?
import unittest
from mock import patch
class TestClass(unittest.TestCase):
@patch(???)
def test_1(self, mock_ftp_constructor):
mock_ftp = mock_ftp_constructor.return_value
a = A()
self.assertTrue(mock_ftp.connect.called)
if __name__ == "__main__":
unittest.main()
如果我使用另一个问题中给出的解决方案,我发现调用了 ftplib 而不是模拟。我怎么知道ftplib的正确路径。FTP ?
在处理导入以模拟类时,文件(类所在的位置(导入库的方式很重要。
要制作补丁,必须知道调用 lib 的上下文的名称。如果__name__'A.B'
,补丁将是:@patch('A.B.ftplib.FTP')
如果B导入FTP作为import ftplib
。如果 B 导入 lib 作为 from ftplib import FTP
,它将是:@patch('A.B.FTP')