smtplib.SMTP.sendmail尝试在单元测试中模拟.修补调用。该sendmail方法似乎已成功模拟,我们可以将其查询为MagicMock,但sendmail 模拟的called和called_args属性未正确更新。看来我没有正确应用补丁。
这是我正在尝试的一个简化示例:
import unittest.mock
with unittest.mock.patch('smtplib.SMTP', autospec=True) as mock:
import smtplib
smtp = smtplib.SMTP('localhost')
smtp.sendmail('me', 'me', 'hello world\n')
mock.assert_called() # <--- this succeeds
mock.sendmail.assert_called() # <--- this fails
此示例生成:
AssertionError: Expected 'sendmail' to have been called.
如果我将补丁更改为smtp.SMTP.sendmail;例如:
with unittest.mock.patch('smtplib.SMTP.sendmail.', autospec=True) as mock:
...
在这种情况下,我可以成功访问模拟的called_args和属性,但由于允许进行初始化,因此与主机建立了实际的 smtp 会话。这是单元测试,我不希望发生实际的网络。calledsmtplib.SMTP
一只名叫tom的猫
Helenr
相关分类