【发布时间】:2015-07-01 07:33:39
【问题描述】:
我不知道为什么我没有得到这个,但我想在 Python 中使用 mock 来测试我的函数是否正确调用了 ftplib.FTP 中的函数。我已经简化了一切,但仍然没有弄清楚它是如何工作的。这是一个简单的例子:
import unittest
import ftplib
from unittest.mock import patch
def download_file(hostname, file_path, file_name):
ftp = ftplib.FTP(hostname)
ftp.login()
ftp.cwd(file_path)
class TestDownloader(unittest.TestCase):
@patch('ftplib.FTP')
def test_download_file(self, mock_ftp):
download_file('ftp.server.local', 'pub/files', 'wanted_file.txt')
mock_ftp.cwd.assert_called_with('pub/files')
当我运行它时,我得到:
AssertionError: Expected call: cwd('pub/files')
Not called
我知道它一定是在使用模拟对象,因为那是一个虚假的服务器名称,并且在不打补丁的情况下运行时,它会抛出“socket.gaierror”异常。
如何获取函数正在运行的实际对象?长期目标是不在同一个文件中包含“download_file”函数,而是从单独的模块文件中调用它。
【问题讨论】:
标签: python unit-testing python-mock