如何在 python 中使用补丁来模拟 python 库,无论它在哪里使用



在下面的问题中,使用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')

相关内容

  • 没有找到相关文章

最新更新